top指令:查看系统性能的命令
uptime:查看系统性能的命令的精简版
vmstat -n 2 3 :查看CPU
mpstat -P ALL 2 :查看所有cpu核信息,每两秒弹一次(idle:cpu空闲率,越高越好,低于60%,cpu就有压力了)
每个进程使用cpu的用量分解信息:pidstat -u 1 -p 进程编号(对于用户,每秒钟查样一次,打印他的详细情况)
查看应用程序可用内存数:free -m(mb为单位)
应用程序可用内存/系统物理内存> 70%内存充足
应用程序可用内存/系统物理内存<20%内存不足,需要增加内存
20%<应用程序可用内存/系统物理内存<70%内存基本够用
查看额外:pidstat -p 进程号 -r 采样间隔秒数(mem占比超过1%,内存占用过多了)
查看磁盘剩余空间数:df -h
磁盘io性能评估:iostat 2 3 (2是采样间隔秒数,3是采样次数)
磁盘块设备分布
rkB/s每秒读取数据量kB;
wkB/s每秒写入数据量kB;
svctm I/O请求的平均服务时间,单位亳秒;
await /O请求的平均等待时间,单位亳秒;值越小,性能越好;
util一秒中有百分几的时间用于I/O操作。接近100%时,表示磁盘带宽跑满,需要优化程序或者增加磁盘;
rkB/s、 wkB/s根据系统应用不同会有不同的值,但有规律遵循:长期、超大数据读写,肯定不正常,需要优化程序读取。
svctm的值与await的值很接近,表示几乎没有I/O等待,磁盘性能好,
如果await的值远高于svctm的值, 则表示I/O队列等待太长,需要优化程序或更换更快磁盘。
查看额外:pidstat -d 采集间隔数 -p 进程号
查看网络io:ifstat 1
假如生产环境出现CPU占用过高,请谈谈你的分析思路和定位
1.先用top命令找出CPU占比最高的
2.ps -ef或者jps进一步定位, 得知是一个怎么样的一个后台程序给我们惹事
3.定位到具体线程或者代码: ps -mp 进程号 -o THREAD,tid,time
-m显示所有的线程
-p pid进程使用cpu的时间
-o 该参数后是用户自定义格式
4.将需要的线程ID转换为16进制格式(英文小写格式) printf “%x\n” 3300
5.jstack 进程ID | grep tid(16进制线程ID小写英文) -A60(-A 显示前多少行)