Linux top 命令使用

top命令结合jvm诊断工具jstack能够快速帮我们定位有问题的代码位置,输入top命令,运行图如下


CPU负载

第一行包括运行时间、当前时间、用户数量和系统平均负载,其中后面三个数字就是一分钟、五分钟和十五分钟到现在的系统负载的平均值;

  • 第二行为任务信息:
信息栏第二行task 含义(进程状况)
total 进程总数
running 正在运行的进程数
sleeping 睡眠状态的进程数
stopped 停止的进程数
zmobie 僵尸进程数
  • 第三行为CPU使用情况
CPU使用情况 含义(表示占用CPU的百分比)
us User Time, CPU执行用户进程的百分比,包括Nice TIme
sy System Time, CPU在内核运行百分比, 包括IRQ和softIRQ
ni Nice Time, 调整进程优先级所用的百分比
id Idle Time, 系统空闲百分比
wa Waitting Time, CPU等待I/O完成所用百分比
hi Hard IRQ Time, 硬中断占用CPU的百分比
si Soft IRQ Time, 软中断占用CPU的百分比
st Steal Time,虚拟服务占用
  • 第四行:物理内存使用情况
KiB Mem 含义(内存使用信息)
total 总物理内存
free 空闲的物理内存
used 已使用的物理内存
buff/cache 缓冲区和缓存区占用内存的总量

这里区别一下buffers和cache,两者都是内存中存放的数据,区别在于buffers存放的是准备写入磁盘的数据,cache存放的是从磁盘中搂出来的数据,在Linux系统中会有一个守护线程,会定期的把buffers写入磁盘,这样可以把分散的I/O操作集合起来,减少了磁盘寻道的时间和磁盘碎片,cache是Linux把读取频率高的数据,放在内存中,减少I/O。Linux中cache没有固定大小,根据使用情况会自动的增加或者删除。

  • 第五行::交换区使用情况
KiB Swap 交换区使用信息
total 交换区总量
free 未使用的
used 已使用的
avail Mem 可用的内存量

交换区是硬盘上的一块空间,在内存不足的情况下,操作系统把内存中不用的数据存在硬盘的交换区中,腾出内存让别的程序运行,因此开启swap会在一定程度上引起I/O效率的下降,像阿里服务器默认不开启

  • 第六行:进程详细信息
进程详细信息
PID 进程id
USER 进程所有者的用户名
PR 优先级
NI nice值
VIRT 进程使用的虚拟内存总量,单位kb
RES 进程使用的,未被换出的物理内存大小,单位kb
SHR 共享内存大小,单位kb
S 进程状态(D:不可中断的睡眠状态,R:运行,S:睡眠, T:跟踪/停止, Z:僵尸进程)
%CPU 上次跟新到现在的CPU时间占用比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMEND 命令名/命令行
  • top命令使用
    -b:可以吧把top输出的内容以可读的形式写入文件,如top -b >> top.txt
    -c:显示完整的命令行(COMMAND),想查看进程执行的具体位置时非常有用
    -d:指定屏幕刷新时间间隔,如top -d 1表示每隔一秒刷新一次
    -s:使用保密模式
    -S:使用累计模式
    -i:不显示任何闲置或者僵尸进程
    -u<用户名>:指定用户名
    -p<进程名>:指定进程号
    -n<次数>:指定循环次数,到了次数自己退出

  • top命令交互式使用
    i:忽略闲置线程和僵尸线程;
    l:切换显示平均负载和启动时间信息;
    m:切换显示内存信息;
    t:切换显示进程和CPU状态信息;
    c:切换显示命令名称和完整命令行;
    M:根据驻留聂存大小进行排序;
    P:根据CPU使用百分比进行排序;
    T:根据时间进行排序;

常用命令:top -p H
查看每个线程详细信息
运用jvm诊断工具jstack可以获取线程的堆栈信息,根据这些线程堆栈信息可以去检查java程序出现问题的地方。

你可能感兴趣的:(Linux top 命令使用)