linux性能分析命令ps,top,vmstat 使用

本文详细介绍了Linux下常用的进程监控命令ps、top及vmstat的使用方法与解析,帮助读者理解如何通过这些命令来监控系统资源使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ps

*语法:ps [options]
注意:该命令查看的是某一时刻的瞬间进程运行的状态,非连续查看
支持三种选项:
UNIX选项如-a(选项前加-)
BSD选项如a
默认显示当前终端中的进程
a选项包括所有终端中的进程
x选项包括不连接终端的进程(TTY的状态为?的进程)
u选项显示进程所有者的信息
f选项显示进程的父进程
o属性… 选项显示定制的信息:
pid、comm、%cpu、%mem、state、tty、euser、ruser***

[14:38 root@Centos6.8/proc/10]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.0  19352  1548 ?        Ss   08:46   0:02 /sbin/init
root          2  0.0  0.0      0     0 ?        S    08:46   0:00 [kthreadd]
root       2007  0.0  0.0   4064   544 tty2     Ss+  08:48   0:00 /sbin/mingetty /dev/tty2
root       2012  0.0  0.0   4064   540 tty3     Ss+  08:48   0:00 /sbin/mingetty /dev/tty3
root       2014  0.0  0.0   4064   544 tty4     Ss+  08:48   0:00 /sbin/mingetty /dev/tty4
root       2017  0.0  0.0   4064   540 tty5     Ss+  08:48   0:00 /sbin/mingetty /dev/tty5
root       2019  0.0  0.0   4064   544 tty6     Ss+  08:48   0:00 /sbin/mingetty /dev/tty6
root       2028  0.0  0.1  12640  2876 ?        S<   08:48   0:00 /sbin/udevd -d
root       2060  0.0  0.1 164924  3564 ?        Sl   08:48   0:00 /usr/libexec/gdm-simple-slave --display-id /org/gnome/DisplayManager
root       2064  0.0  1.5 196384 29084 tty1     Ssl+ 08:48   0:04 /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/gdm/auth-for-g
root       2087  0.0  0.1 1036464 3360 ?        Sl   08:48   0:00 /usr/sbin/console-kit-daemon --no-daemon
gdm        2159  0.0  0.0  20044   696 ?        S    08:48   0:00 /usr/bin/dbus-launch --exit-with-session

**USER:发起进程的用户
PID:PID号
%CPU:使用CPU百分比
%MEM:使用内存百分比
VSZ:Virtual memory SiZe,虚拟内存集,线性内存
RSS:ReSidentSize, 常驻内存集
TTY:和终端相关
STAT:进程状态
START:进程开始时间
TIME:进程真正在CPU运行的时间,而非挂表时长
COMMANDD:发起进程的命令,【如果命令中有中括号,代表是内核进程】**

ps - 按进程消耗内存多少排序
ps -eo rss,pmem,pcpu,vsize,args | sort -k 1 -r -n | less

top

top

top - 16:55:12 up 4 days, 19:15,  3 users,  load average: 0.00, 0.00, 0.00
Tasks: 169 total,   1 running, 168 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.7%us,  0.7%sy,  0.0%ni, 98.3%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   1004768k total,   876500k used,   128268k free,   114876k buffers
Swap:  2031612k total,        8k used,  2031604k free,   388272k cached


   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                  
  4635 w         20   0  291m  17m  14m S  1.0  1.8   8:20.21 vmtoolsd                                                  
  1552 root      20   0  173m 8104 4540 S  0.7  0.8  15:36.70 vmtoolsd                                                  
  3074 mysql     20   0  895m  73m  12m S  0.7  7.5   6:55.30 mysqld                                                    
  4572 w         20   0  494m  10m 8192 S  0.7  1.1   0:12.53 gnome-settings-                                           
     7 root      20   0     0    0    0 S  0.3  0.0   9:44.50 events/0                                                  
    24 root      20   0     0    0    0 S  0.3  0.0   3:02.92 ata_sff/0                                                 
   729 root      20   0     0    0    0 S  0.3  0.0   0:28.84 vmmemctl                                                  
  3492 root      20   0  134m 9528 1052 S  0.3  0.9   7:19.99 redis-server                                              
  4983 root      20   0 99976 4048 3088 S  0.3  0.4   0:03.41 sshd                                                      
  5373 root      20   0 15032 1272  928 R  0.3  0.1   0:00.17 top                                                       
     1 root      20   0 19356 1544 1228 S  0.0  0.2   0:07.43 init                                                      
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                  
     3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0                                               
     4 root      20   0     0    0    0 S  0.0  0.0   0:56.32 ksoftirqd/0                                               
     5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0                                                 
     6 root      RT   0     0    0    0 S  0.0  0.0   0:13.14 watchdog/0                                                
     8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events/0                                                  
     9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_long/0                                             
    10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_power_ef                                           
    11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup                                                    
    12 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper                                                   
    13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns                                                     
    14 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr                                                 
    15 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm                                                        
    16 root      20   0     0    0    0 S  0.0  0.0   0:06.45 sync_supers 

uptime

过去15分钟 CPU的负载
16:58:37 up 109 days, 16:57, 1 user, load average: 0.00, 0.00, 0.00

如果这个数除以CPU的数目,结果高于5的时候就表明系统在超负荷运转了,正常应该控制在小于1的范围内,通常我们先看15分钟load,如果load很高,再看1分钟和5分钟负载,查看是否有下降趋势。

第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si

最后两行为内存信息。内容如下:
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。

vmstat

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 629036 269024 553024    0    0     6     4  163  109  1  2 97  0  0    

sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。

r 表示运行队列(就是说多少个进程真的分配到CPU),如果这个值超过了CPU数目就会出现CPU瓶颈,这个和top的负载有关系。
b 表示阻塞的进程
swpd 虚拟内存已经使用大小,如果大于0表示机器物理内存不足
free 表示空闲的物理内存的大小,
buff linux/unix 系统是用来存储目录里面有什么内容,权限等的缓存,
cache 用来记忆我们打开的文件,给文件做缓存,把空闲的物理内存的部分那俩做文件和目录的缓存,是为了提高程序执行的性能,当程序使用内存时。buffer/cached会很快的被使用

si 每秒从磁盘读入虚拟内存的大小,如果大于0 表示物理内存不够用
so 每秒虚拟内存写入磁盘的大小同上

bi 块设备每秒接收的块数量,这里的块设备实质系统上所有的磁盘和其他块设备,默认块大小是1024byte
bo 块设备每秒发送的块数量,同上, bi和bo Ibanez都要接近0 ,不然就是IO过于频繁,需要调整
这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。

in 每秒CPU的中断次数,包括时间中断。
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。
sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。
sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wa 等待IO CPU时间。
wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。

得到特定进程的内存使用信息

得到mysqld进程的pid
[root@6 ~]# pidof mysqld
top指定查看PID
[root@6 ~]# top -p 21538

查看特定进程线程情况
top -H -p

转自:http://www.mamicode.com/info-detail-1519419.html
https://my.oschina.net/u/1396185/blog/366043

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值