Linux下内存使用率、CPU使用率、以及运行原理

newcryout 贡献于2011-12-17

作者 YlmF  创建于2011-12-17 17:06:00   修改者YlmF  修改于2011-12-17 17:16:00字数7812

文档摘要: Linux下怎样查看机器配置啊?cpu/内存/硬盘dmesg   显示开机信息。kernel会将开机信息存储在ringbuffer中。您若是开机时来不及查看信息,可利用dmesg来查看。
关键词:

Linux下 内存使用率、CPU使用率、以及运行原理  Linux下怎样查看机器配置啊?cpu/内存/硬盘 dmesg     显示开机信息。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里dmesg|grep hd     硬盘 dmesg|grep cpu cpu dmesg|grep proc     内存 dmesg|grep redhat     操作系统 dmesg|more     更多信息 uname -a 操作系统版本     查看linux cpu和内存利用率     在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲 q 键一次)。   操作实例:   在命令行中输入 “top”   即可启动 top   top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。   第一部分 -- 最上部的 系统信息栏 :   第一行(top):         “00:11:04”为系统当前时刻;         “3:35”为系统启动后到现在的运作时间;         “2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;         “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;   第二行(Tasks):         “59 total”为当前系统进程总数;         “1 running”为当前运行中的进程数;         “58 sleeping”为当前处于等待状态中的进程数;         “0 stoped”为被停止的系统进程数;         “0 zombie”为被复原的进程数;   第三行(Cpus):     分别表示了 CPU 当前的使用率;   第四行(Mem):     分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;   第五行(Swap):         表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。   第二部分 -- 中间部分的内部命令提示栏:   top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下表:   s   - 改变画面更新频率   l - 关闭或开启第一部分第一行 top 信息的表示   t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示   m - 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示   N - 以 PID 的大小的顺序排列表示进程列表(第三部分后述)   P - 以 CPU 占用率大小的顺序排列进程列表 (第三部分后述)   M - 以内存占用率大小的顺序排列进程列表 (第三部分后述)   h - 显示帮助   n - 设置在进程列表所显示进程的数量   q - 退出 top   s -   改变画面更新周期   第三部分 -- 最下部分的进程列表栏:     以 PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过 top 内部命     令可以控制此处的显示方式     在Linux下查看内存我们一般用free命令: [root@scs-2 tmp]# free     total       used       free     shared    buffers     cached Mem:       3266180    3250004      16176          0     110652    2668236 -/+ buffers/cache:     471116    2795064 Swap:      2048276      80160    1968116     下面是对这些数值的解释: total:总计物理内存的大小。 used:已使用多大。 free:可用有多少。 Shared:多个进程共享的内存总额。 Buffers/cached:磁盘缓存的大小。     第三行(-/+ buffers/cached): used:已使用多大。 free:可用有多少。     第四行就不多解释了。     区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.     第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。     所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。     如上例: 2795064=16176+110652+2668236     接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。     如何看额定值: cat /proc/meminfo [root@scs-2 tmp]# cat /proc/meminfo MemTotal:      3266180 kB MemFree:         17456 kB Buffers:        111328 kB Cached:        2664024 kB SwapCached:          0 kB Active:         467236 kB Inactive:      2644928 kB HighTotal:           0 kB HighFree:            0 kB LowTotal:      3266180 kB LowFree:         17456 kB SwapTotal:     2048276 kB SwapFree:      1968116 kB Dirty:               8 kB Writeback:           0 kB Mapped:         345360 kB Slab:           112344 kB Committed_AS:   535292 kB PageTables:       2340 kB VmallocTotal: 536870911 kB VmallocUsed:    272696 kB VmallocChunk: 536598175 kB HugePages_Total:     0 HugePages_Free:      0 Hugepagesize:     2048 kB     用free -m查看的结果: [root@scs-2 tmp]# free -m              total       used       free     shared    buffers     cached Mem:          3189       3173         16          0        107       2605 -/+ buffers/cache:        460       2729 Swap:         2000         78       1921     查看/proc/kcore文件的大小(内存镜像): [root@scs-2 tmp]# ll -h /proc/kcore -r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore     备注:     占用内存的测量     测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。 /proc/meminfo 机器的内存使用信息 /proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。 /proc/pid/statm 进程所占用的内存 [root@localhost ~]# cat /proc/self/statm 654 57 44 0 0 334 0     输出解释     CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:     参数 解释 /proc//status Size (pages) 任务虚拟地址空间的大小 VmSize/4 Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4 Shared(pages) 共享页数 0 Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4 Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4 Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4 dt(pages) 04     查看机器可用内存 /proc/28248/>free total used free shared buffers cached Mem: 1023788 926400 97388 0 134668 503688 -/+ buffers/cache: 288044 735744 Swap: 1959920 89608 1870312     我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。     所以 空闲内存=free+buffers+cached=total-used     linux下如何获取cpu的利用率     "proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。"     这里将介绍如何从/proc文件系统中获取与防火墙相关的一些性能参数,以及如何通过/proc文件系统修改内核的相关配置。     1、从/proc文件系统获取相关的性能参数     cpu使用率:    /proc/stat     内存使用情况:      /proc/meminfo     网络负载信息:    /proc/net/dev 相应的计算方法:(摘自:什么是proc文件系统,见参考资料)     (1)   处理器使用率        (2)   内存使用率        (3)   流入流出数据包        (4)   整体网络负载        这些数据分别要从/proc/stat、/proc/net/dev、/proc/meminfo三个文件中提取。如里有问题或对要提取的数据不太清楚,可以使用man   proc来查看proc文件系统的联机手册。        (1)   处理器使用率        这里要从/proc/stat中提取四个数据:用户模式(user)、低优先级的用户模式(nice)、内核模式(system)以及空闲的处理器时间(idle)。它们均位于/proc/stat文件的第一行。CPU的利用率使用如下公式来计算。        CPU利用率 = 100 * (user + nice + system) / (user + nice + system + idle)    (2)   内存使用率        这里需要从/proc/meminfo文件中提取两个数据,当前内存的使用量(cmem)以及内存总量(amem)。        内存使用百分比 = 100 * (cmem / umem)        (3)网络利用率        为了得到网络利用率的相关数据,需要从/proc/net/dev文件中获得两个数据:从本机输出的数据包数,流入本机的数据包数。它们都位于这个文件的第四行。        性能收集程序开始记录下这两个数据的初始值,以后每次获得这个值后均减去这个初始值即为从集群启动开始从本节点通过的数据包。        利用上述数据计算出网络的平均负载,方法如下:        平均网络负载 = (输出的数据包+流入的数据包) / 2         2. 通过/proc文件系统调整相关的内核配置     允许ip转发   /proc/sys/net/ipv4/ip_forward     禁止ping    /proc/sys/net/ipv4/icmp_echo_ignore_all         可以在命令行下直接往上述两个“文件”里头写入"1"来实现相关配置,如果写入"0"将取消相关配置。不过在系统重启以后,这些配置将恢复默认设置,所 以,如果想让这些修改生效,可以把下面的配置直接写入/etc/profile文件,或者其他随系统启动而执行的程序文件中。 echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all     如果需要获取其他的性能参数,或者需要对内核进行更多的配置,可以参考下面链接中的proc文件系统介绍,也可以直接通过man proc查看相关的信息。 参考资料和相关链接 [1] 什么是proc文件系统 http://blog.chinaunix.net/u1/37836/showart_304248.html [2] Linux下如何获取cpu的使用率 http://topic.csdn.net/t/20060701/23/4855045.html [3] Exploring the /proc/net/ Directory http://www.linuxdevcenter.com/pub/a/linux/2000/11/16/LinuxAdmin.html?page=1 [4] /proc/net introduction http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/en-US/ Reference_Guide/s2-proc-dir-net.html [5] 使用ulimit和proc去调整系统参数 http://www.linuxfly.org/post/73.htm     注:文件里面是一个增量,每过一个时间间隔对应的项使用了CPU都会有增加,要算百 分比,得用上上一次的状态值.     这里计算cpu使用率是有问题的,需要使用上一状态的值来计算。     返回 elf 发表于 2007-11-16 09:06     #4 正确的计算方法是,等上一个时间: 1、记录某个时刻cpu的使用情况 2、等上一个时间段 3、再记录此刻的cpu使用情况 4、计算总的时间片 把第一次的所有cpu使用情况求和,得到j1 把第二次的所有cpu使用情况求和,得到j2 j2-j1得到这个时间段的所有时间片 即total=j2-j1=第二次的所有列的和-第一次的所有列的和 5、计算idle时间 idle对应第五列的数据,用第二次的减去第一次的即可 idle=第二次的第五列-第一次的第五列 6、计算cpu使用率 rate=(total-idle)/total 见:http://oss.lzu.edu.cn/blog/article.php?tid_1379.html     我们在搞性能测试的时候,对后台服务器的CPU利用率监控是一个常用的手段。服务器的CPU利用率高,则表明服务器很繁忙。如果前台响应时间越来越大, 而后台CPU利用率始终上不去,说明在某个地方有瓶颈了,系统需要调优。这个是即使不懂技术的人都容易理解的事情。     上面理解对吗?我个人觉得不十分准确。这个要看后台你测试的进程是什么类型的。如果是计算密集型的进程,当前端压力越来越大的时候,很容易把CPU利用 率打上去。但是如果是I/O网络密集型的进程,即使客户端的请求越来越多,但是服务器CPU不一定能上去,这个是你要测试的进程的自然属性决定的。     什么是CPU利用率呢?在Linux/Unix下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时 间,和空闲系统进程执行的时间。从计算机加电开始,CPU就一直忙个不停,所以CPU的利用率始终是100%。当没有用户进程需要执行的时候,CPU就执 行系统缺省的空闲进程。我们所指的CPU利用率是指CPU执行非系统空闲进程的时间 / CPU总的执行时间。     在Linux的内核中,有一个全局变量:Jiffies。 Jiffies代表时间。它的单位随硬件平台的不同而不同。系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目。这样jiffies的单位就是 1/HZ。Intel平台jiffies的单位是1/100秒,这就是系统所能分辨的最小时间间隔了。每个CPU时间片,Jiffies都要加1。 CPU的利用率就是用执行用户态+系统态的Jiffies除以总的Jifffies来表示。     在Linux系统中,CPU利用率的计算来源在/proc/stat文件,这个文件的头几行记录了每个CPU的用户态,系统态,空闲态等状态下的不同的Jiffies,常用的监控软件就是利用/proc/stat里面的这些数据来计算CPU的利用率的。     包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。 /proc/stat/ [work@builder ~]$ cat /proc/stat cpu 432661 13295 86656 422145968 171474 233 5346 cpu0 123075 2462 23494 105543694 16586 0 4615 cpu1 111917 4124 23858 105503820 69697 123 371 cpu2 103164 3554 21530 105521167 64032 106 334 cpu3 94504 3153 17772 105577285 21158 4 24 intr 1065711094 1057275779 92 0 6 6 0 4 0 3527 0 0 0 70 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7376958 0 0 0 0 0 0 0 1054602 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  ctxt 19067887 btime 1139187531 processes 270014 procs_running 1 procs_blocked 0     输出解释     CPU 以及CPU0、CPU1、CPU2、CPU3每行的每个参数意思(以第一行为例)为:     参数 解释     user (432661) 从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies),不包含 nice值为负进程。1jiffies=0.01秒     nice (13295) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)     system (86656) 从系统启动开始累计到当前时刻,核心时间(单位:jiffies)     idle (422145968) 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)     iowait (171474) 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies)     irq (233) 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)     softirq (5346) 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)     CPU时间=user+system+nice+idle+iowait+irq+softirq     “intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。     “ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。     “btime”给出了从系统启动到现在为止的时间,单位为秒。     “processes (total_forks) 自系统启动以来所创建的任务的个数目。     “procs_running”:当前运行队列的任务的数目。     “procs_blocked”:当前被阻塞的任务的数目。     那么CPU利用率的计算方法:可以使用取两个采样点,计算其差值的办法。     (idle2-idle1)/cpu2-cpu1

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 2 人已下载

下载文档