1.uptime 用法:
- 16:02:17 为当前系统的时间
- up 148 days,8:43 表示系统已运行148天8小时43分钟
- 1 user 表示用户连接数为1
- load average: 0.99,0.99,1.00 表示系统平均负载 统计最近1,5 ,15分钟的系统平均负载
注:load average的理想状态是:内核数乘以0.5-0.7
如:4核CPU的服务器,理想负载小于2 表示系统很闲 2-2.8 为理想状态 大于2.8系统比较繁忙
2.TOP 用法:
统计信息区前五行为系统整体的统计信息:
- 第一行运行结果同 uptime进行结果相同
- 第二行 Tasks: total-进程总数 running-正在运行的进程数 sleeping-睡眠的进程数 stopped-停止的进程数 zombile-僵尸进程数
- 第三行 %Cpu(s): 12.5% us-用户空间占用CPU百分比
87.5 id-空闲CPU百分比
- 第四行 Mem: 16267180 total 表示物理内存总量
11166040 free 空闲内存总量
3041252 used -使用的物理内存总量
2059696 buff/cache -用作内核缓存的内存量
- 第五行 SWAP 为交换区信息
可用内存的计算:totalfree=free+buff/cache
3.JPS 用法:
JPS可直接罗列出当前系统中的java进程
top -p 11468 直接查看此进行的相关信息
4.jstat 用法:用于输出java程序内存使用情况,包括新生代、老年代、元数据区容量、垃圾回收情况
上述命令为:输出进程号为11468的内存使用情况(每2000ms输出一次,一共输出5次)
- S0:幸存1区当前使用比例
- S1:幸存2区当前使用比例
- E:伊甸园区使用比例
- O:老年代使用比例
- M:元数据区使用比例
- CCS:压缩使用比例
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
5.jmap 用法:用于输出java程序中内存对象的情况,包括有哪些对象,对象的数量。
jmap -histo 11468
上述命令打印出进程ID为11468的内存情况。但我们常用的方式是将指定进程的内存heap输出到外部文件,再由专门的heap分析工具进行分析,例如mat(Memory Analysis Tool),所以我们常用的命令是:
jmap -dump:live,format=b,file=heap.hprof 11468
6.jstack 查看线程信息
jstack 10765 可以打印出进程堆栈的堆栈信息
实战实例:
(一)当Linux系统CPU飙升时,找出系统中最耗CPU资线程
-
找到最耗CPU的进程
执行top -c ,显示进程运行信息列表
键入P (大写p),进程按照CPU使用率排序
注:这里的cpu使用率是所有cpu使用率的总和,可以在输入top命令后,再输入"1"查看各个CPU使用情况,如:
其中有一个cpu使用率一直是100%,这时应该怀疑程序有死循环的情况。
- 找到最耗CPU的线程
top -Hp 23319 ,显示一个进程的线程运行信息列表
键入P (大写p),线程按照CPU使用率排序
-
将线程PID转化为16进制
之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的。
- 查看堆栈,找到对应的线程
./jstack 23319 |grep 0x5bb6 -C 10 --color
可以看出线程一直运行在某个地方。