top 命令查看整机性能
load average表示系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
三个系统平均负载值。如果三个值相加 除以3 *100% 高于60%那么系统的压力负担较重
uptime 查看整机性能精简版
CPU查看vmstat
vmstat -n 2 3
每2秒采样一次共计采样3次
procs
- r:运行和等待的CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不超过总核数的2倍,否则代表系统压力过大,我们看蘑菇博客测试服务器,能发现都超过了2,说明现在压力过大
- b:等待资源的进程数,比如正在等待磁盘I/O、网络I/O等
cpu
- us:用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,优化程序
- sy:内核进程消耗的CPU时间百分比
- us + sy 参考值为80%,如果us + sy 大于80%,说明可能存在CPU不足,从上面的图片可以看出,us + sy还没有超过百分80,因此说明蘑菇博客的CPU消耗不是很高
- id:处于空闲的CPU百分比
- wa:系统等待IO的CPU时间百分比
- st:来自于一个虚拟机偷取的CPU时间比
CPU查看pidstat
查看看所有cpu核信息 :mpstat -P ALL 2 两秒一次
每个进程使用cpu的用量分解信息 :pidstat -u 1 -p 进程编号
内存查看free和pidstat
应用程序可用内存数 : free free -m free -g
查看额外:pidstat -p 进程号 -r 采样间隔秒数
经验值
-
应用程序可用内存l系统物理内存>70%内存充足
-
应用程序可用内存/系统物理内存<20%内存不足,需要增加内存
-
20%<应用程序可用内存/系统物理内存<70%内存基本够用
查看磁盘剩余空间数:df -h (human 人类能看懂的)
磁盘IO查看iostat和pidstat
磁盘I/O性能评估
磁盘块设备分布
- rkB/s每秒读取数据量kB;wkB/s每秒写入数据量kB;
- svctm lO请求的平均服务时间,单位毫秒;
- await l/O请求的平均等待时间,单位毫秒;值越小,性能越好;
- util一秒中有百分几的时间用于I/O操作。接近100%时,表示磁盘带宽跑满,需要优化程序或者增加磁盘;
- rkB/s、wkB/s根据系统应用不同会有不同的值,但有规律遵循:长期、超大数据读写,肯定不正常,需要优化程序读取。
- svctm的值与await的值很接近,表示几乎没有IO等待,磁盘性能好。
- 如果await的值远高于svctm的值,则表示IO队列等待太长,需要优化程序或更换更快磁盘。
网络IO查看ifstat
下载ifstat
wget http://gael.roualland.free.fr/lifstat/ifstat-1.1.tar.gz
tar -xzvf ifstat-1.1.tar.gz
cd ifstat-1.1
./configure
make
make install
查看网络IO,各个网卡的in、out,观察网络负载情况程序,网络读写是否正常
- 程序网络I/O优化
- 增加网络I/O带宽
结合Linux和JDK命令分析CPU占用过高的定位
1、先用top命令找出CPU占比最高的
2、ps -ef|grep 1300|grep -v grep 或者jps -l|grep 关键字 进一步定位
定位到具体线程或者代码
- ps -mp 进程 -o THREAD,tid,time
- -m 显示所有的线程
- -p pid进程使用cpu的时间
- -o 该参数后是用户自定义格式
ps -mp 1300 -o THREAD,tid,time
找到CPU最高的tid(图中没有只用于举例)
3、jstack 进程ID | grep tid(16进制线程ID小写英文)-A60
命令printf %x 1300将1300转换为十六进制
没有输出结果(CPU占用不高)