Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions system/cpu.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
进程分析之CPU
=================

在[《进程分析之内存》](./system/memory.md)文中,对系统/进程的内存使用情况进行分析了,本文将从cpu使用情况对进程进行分析;在这之前,先针对cpu比较相关几个概念进行介绍
在[《进程分析之内存》](./memory.md)文中,对系统/进程的内存使用情况进行分析了,本文将从cpu使用情况对进程进行分析;在这之前,先针对cpu比较相关几个概念进行介绍

## CPU INFO的阅读以及对基本概念的了解;

Expand Down Expand Up @@ -113,7 +113,7 @@ cpu物理/逻辑信息数据都可以从/proc/cpuinfo中可以获取,下面将
> 方法二:ps -efL
>
> ps的-f参数解析:does full-format listing. When used with -L, the NLWP (number of threads) and LWP (thread ID) columns will be added.
> -f参数将会完整的显示进程信息,比如PPID(父进程ID),C(CPU使用率)等,如果-L配合,将会线程每个PID的轻量进程数目和每个轻量进程号
> -f参数将会完整的显示进程信息,比如PPID(父进程ID),C(CPU使用率)等,如果-L配合,将会显示每个PID的轻量进程数目和每个轻量进程号

ps -efL |grep scribed-lighty
UID PID PPID LWP C NLWP STIME TTY TIME CMD
Expand All @@ -138,7 +138,7 @@ cpu物理/逻辑信息数据都可以从/proc/cpuinfo中可以获取,下面将

此时nice%,就是来度量这种因为改变优先级的进程的占用CPU用户态的比例,即0.5k/总的调度时间;而user%为1k/总的调度时间;那么进程A在一次调度过程占用的**用户态时间片**比例为(0.5k+ 1k)/总的调度时间;

nice值为负数,优先级高了,可以多获取nice%的时间片;如果nice值为0或者为正值,进程被调度的优先级降低,此时nice%=0,但是在在总的调度时间不变的情况,优先级高的进程会多占时间皮,那么低优先级进程的user%就会减少;所以**整个系统用于用户态的CPU比例应该是所有进程的user%+nice%**
nice值为负数,优先级高了,可以多获取nice%的时间片;如果nice值为0或者为正值,进程被调度的优先级降低,此时nice%=0,但是在在总的调度时间不变的情况,优先级高的进程会多占时间片,那么低优先级进程的user%就会减少;所以**整个系统用于用户态的CPU比例应该是所有进程的user%+nice%**

进程的nice值是可以被修改的,修改命令分别是nice和renice。

Expand Down
4 changes: 2 additions & 2 deletions system/memory.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ used内存会被系统用来做哪些调度?

1. 实实在在被进程占用,比如进程申请的栈内存,**被分配并被使用**的堆内存(这里强调一下分配并被使用,通过new/malloc分配的进程内存空间不一定实实在在占用了物理内存,详情见后面的分析),在进程存活并未主动释放的case下,这块内存是无法被系统调度给其他进程使用,即第三行used=12309972部分;
2. 用于写buffer,即上面buffers:96524,对于文件写操作需要经过写buffer的过程再落盘到磁盘上,而buffer这块内存是可以被系统回收并反复被调度的内存;
3. 用于读cached,即上面的cached:35946452,系统会将一大部分内存用于cache,比如用于文件预读等,与buffer相同,这部分内存可以被系统重复调度给信息的进程
3. 用于读cached,即上面的cached:35946452,系统会将一大部分内存用于cache,比如用于文件预读等,与buffer相同,这部分内存可以被系统重复调度给新的进程

因此,一个系统被调度内存大小=buffers+cached+第三行的物理used;可用于新进程的内存大小=free+buffers+cached;而这个数字即为上面第三行free=37096168;第三行表示当前物理内存被系统物理占用的内存,used=12309972,以及可以被调度的内存大小free;而这里free+used即为total物理内存大小;在日常运维过程中,可以通过free命令的第三行的free部分来快速获取机器物理内存被实际占用情况

Expand Down Expand Up @@ -67,7 +67,7 @@ top不仅仅用于内存分析,还用于进程分析,今天只写关于内

SHR=6992共享内存区大小;在linux系统中进程之间是可以做内存共享,比如一些系统级别的so,只需要加载一次,就可以被所有的进程共享,在不涉及大的进程内存共享的应用程序,基本不需要关注这部分内存的大小;

> free,vmstat,top等命令可以获取当前服务器当前swap的大小;swap空间是一部分磁盘空间,相比内存来说,性能要差很多,但是在机器内存不够的情况下,swap是保证系统正常运行的最后一段关卡了;在系统里,是通过一个swappiness的值来控制对swap使用。如果swappiness=0的时候表示最大限度使用物理内存,才物理内存为0的时间才开始使用swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时搬运到swap空间中。linux的基本默认设置为60(/proc/sys/vm/swappiness=60);也就是说,你的内存在使用到100-60=40%的时候,就开始出现有swap的使用。大家知道,内存的速度会比磁盘快很多,这样子会加大系统io,同时造的成大量页的换进换出,严重影响系统的性能,所以我们在操作系统层面,要尽可能使用内存,对该参数进行调整。
> free,vmstat,top等命令可以获取当前服务器当前swap的大小;swap空间是一部分磁盘空间,相比内存来说,性能要差很多,但是在机器内存不够的情况下,swap是保证系统正常运行的最后一段关卡了;在系统里,是通过一个swappiness的值来控制对swap使用。如果swappiness=0的时候表示最大限度使用物理内存,在物理内存为0的时间才开始使用swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时搬运到swap空间中。linux的基本默认设置为60(/proc/sys/vm/swappiness=60);也就是说,你的内存在使用到100-60=40%的时候,就开始出现有swap的使用。大家知道,内存的速度会比磁盘快很多,这样子会加大系统io,同时造的成大量页的换进换出,严重影响系统的性能,所以我们在操作系统层面,要尽可能使用内存,对该参数进行调整。
>
> 目前在使用的服务器上基本都是关闭swap,通过人工运维来合理分配每个机器上最大可使用内存,避免swap对服务的性能造成影响;
>
Expand Down