前沿:
CPU和内存是系统层面影响应用性能的重要因素
一.CPU性能监控
查看系统的cpu使用率是否有异常的常用命令有top,vmstat,ps等。
1.top命令
通过命令 top 查看CPU使用情况,按P查看占用cpu最高的进程
top ##监控系统负载工具
%cpu
- us 表示用户进程处理所占的百分比
- sy 表示为内核线程处理所占的百分比
- ni 表示被nice命令改变优先级的任务所占的百分比
- id 表示cpu的空闲时间所占的百分比
- wa 表示为在执行过程中等待io所占的百分比
- hi 表示为硬件中断所占的百分比
- si 表示为软件中断所占的百分比
- st 表示虚拟cpu等待实际cpu的时间的百分比
cpu性能监控主要通过us(用户进程所占用百分比)这个数据来看异常的进程信息。当us接近100%甚至更高时,可以确定是cpu繁忙造成的响应缓慢。一般说来,cpu繁忙的原因有以下几个:
- 线程中有无限空循环、无阻塞、正则匹配或者单纯的计算
- 频繁的gc
- 多线程频繁的上下文切换
top显示进程信息详解
字段 | 说明 |
---|---|
top | 系统当期时间 |
up | 系统运行时长 |
user | 登录当前系统的用户数量 |
load average | 平均负载1 ,5,15 分钟的队列长度 |
task | 任务 |
Mem | 物理内存 |
swap | 交换分区占用 |
%cpu | cpu占用百分比 |
top字段解释
字段 | 解释 |
---|---|
PID | 进程ID |
USER | 用户名称 |
PR | 优先级 |
NI | nice值。负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量 |
RES | 进程使用的、未被换出的物理内存大小 |
SHR | 共享内存大小 |
S | 进程状态 (D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 ) |
%CPU | 占用cpu百分比 |
%MEM | 占用内存百分比 |
TIME+ | 进程使用的CPU时间总计 |
COMMAND | 进程名称 |
top内部参数
参数 | 说明 |
---|---|
P | cpu百分比排序 |
M | 内存百分比 |
T | 累计占用cpu时间 |
l | 开启/关掉uptime信息 |
t | 开启/关闭task&cpu信息 |
s | 调整刷新频率 |
k | 终止进程 |
u | 查看指定用户进程 |
2.ps命令
ps ax -o %cpu,comm,pid --sort -%cpu | head -n 10 ##按照cpu负载进行排序
查使用CPU最多的K个进程
ps -aux | sort -k4nr | head -K
命令解释:
- ps -aux (a指代all——所有的进程,u指代userid——执行该进程的用户id,x指代显示所有程序,不以终端机来区分)
- sort -k4nr中(k代表从第几个位置开始,后面的数字4即是其开始位置,结束位置如果没有,则默认到最后;n指代numberic sort,根据其数值排序;r指代reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。)。本例中,可以看到%MEM在第4个位置,根据%MEM的数值进行由大到小的排序。
- head -K(K指代行数,即输出前几位的结果)
- |为管道符号,将查询出的结果导到下面的命令中进行下一步的操作
3.vmstat
- in 每秒CPU的中断次数,包括时间中断
- cs 每秒上下文切换次数
- us 用户CPU时间。
- sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
- id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
- wt 等待IO CPU时间
二.内存性能监控
1.top命令
通过命令 top 查看内存使用情况,按M查看占用内存最高的进程
2.ps命令
ps ax -o %mem,comm,pid --sort -%mem | less ##按照内存负载进行排序
查看使用内存最多的进程
ps -aux | sort -k3nr | head -K