目录
一、如何定位CPU性能问题?
1、top命令
一般会关注是哪个进程,甚至哪个线程占用的CPU比较高。可以使用如下命令知道进程,并显示线程。
top –H –p xxxx(进程号)
us 用户空间占用CPU百分比,如果这个值较高则需要关注。
sy 内核 空间占用CPU百分比。
ni 用户进程空间内改变过优先级的进程占用CPU百分比。
id 空闲CPU百分比。
wa 等待输入输出的CPU时间百分比,如果这个数值长期维持在较高水平,说明磁盘I/O可能是性能瓶颈。
hi 表示服务中硬件中断花费的时间。
si 表示服务中软件中断花费的时间。
st 表示通过hypervisor虚拟机偷走的时间。
中断:包括硬中断与软中断。硬中断对性能有更加不利的影响。较高的中断值可能有软件瓶颈。
2、ps命令
ps –aux 查看进程的详细情况,包括CPU使用情况。
ps –eLf | grep xxxx(进程ID) 查看xxxx 进程的各线程的CPU占用情况。
3、sar命令
sar手机包括CPU利用率、上下文切换和终端速率,页换入和页换出速率,共享内存的使用情况,缓冲区使用情况以及网络使用情况。
sar 2 5 //每隔2秒,显示5次CPU使用情况
sar -v 3 5 //每3秒采样一次,连续采样5次,观察核心表状态
sar -d 30 5 //每30秒采样一次,连续采样5次,报告设备使用情况
sar -b 10 3 //每30秒采样一次,连续采样5次,报告缓冲区的使用情况
二、如何定位内存性能问题?
1、free
在命令行输入:free,有如下图显示:
在Mem行有5列,每列的参数意义如下:
total:总计物理内存的大小。
used:已使用的物理内存大小。
free:可用的物理内存大小。
Shared:多个进程共享的内存总额。
Buffers/cached:缓存大小。
在-/+ buffers/cached行是应用程序使用的内存情况,有两列:
used: 应用程序已使用了的内存大小。
free: 应用程序还可以使用的内存。如果该值较小,表示内存不足。
在SWAP行是磁盘交换分区内存的参数,共有3列:
total:总计交换分区内存的大小。
used:已使用的交换分区内存大小。
free:可用的交换分区内存大小。
2、pmap
该命令可以查看进程详细的内存申请情况,在定位内存泄露的时候,可以多次执行该命令,然后对比,查找内存的瓶颈。
- 常用执行命令
pmap –d <pid>
输出列中的DEVICE描述如下:
fd:01:应用程序私有的动态库映射的内存
00:00:进程动态分配的内存,堆栈空间
08:02:操作系统自带的动态库占用的内存
3、vmstat
vmstat命令提供了对进程、内存、页面I/O块和CPU等信息的监控,vmstat可以显示检测结果的平均值或者取样值,取样模式可以提供一个取样时间段内不同频率的监测结果。
- process(procs)
r:等待运行时间的进程数量
b:处在不可中断睡眠状态的进程
w:被交换出去但是仍然可以运行的进程,这个值是计算出来的
- memory
swpd:虚拟内存的数量
free:空闲内存的数量
buff:用做缓冲区的内存数量
- swap
si:从硬盘交换来的数量
so:交换到硬盘去的数量
如果内存碎片比较多,那么swap的值就比较大。
- IO
bi:向一个块设备输出的块数量
bo:从一个块设备接受的块数量
- system
in:每秒发生的中断数量, 包括时钟
cs:每秒发生的context switches的数量
- cpu(整个cpu运行时间的百分比)
us:非内核代码运行的时间(用户时间,包括nice时间)
sy:内核代码运行的时间(系统时间)
id:空闲时间,在Linux 2.5.41之前的内核版本中,这个值包括I/O等待时间;
wa:等待I/O操作的时间,在Linux 2.5.41之前的内核版本中这个值为0
vmstat 还提供了大量附加的参数。例如:
m:显示内核的内存利用率。
a:显示内存页面信息,包括活跃和不活跃的内存页面。
n:显示报头行,这个参数在使用取样模式并将命令结果输出到一个文件时非常有用。
三、如何监控网口流量?
1、dstat
常用命令:dstat -N [网口名]
如下图,enp1s0f0网口正在接收数据,速度大改为100MB/s:
四、如何进行实时监控?
可以将以上几个监控工具写到脚本里,结合crond定时触发,完成实时监控的功能。