java 生产环境调优排查总结
整机:Top
top命令后 M(以内存大小排列)P(以cpu大小排列) 1(cpu详细情况)q(退出)
-
load average: 0.00, 0.01, 0.05
1分钟、5分钟、15分钟的负载情况,如果3个值相加除以3乘以100% 高于60%说明系统负载过重 -
%CPU 进程占用百分比
-
%MEM — 进程使用的物理内存百分比
-
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
-
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
CPU: vmstat
一般vmstat工具是通过两个数字参数来完成的,第一个参数是采样的时间间隔单位是秒,第二个参数是采样的次数
-
procs
- r: 运行和等待cpu时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不能超过总核数的2倍,否则代表系统压力过大
- b: 等待资源的进程数,比如正在等待磁盘I/O、网络I/O等
-
cpu
- us:用户进程消耗CPU时间百分比,us值高,用户进程消耗cpu时间多,如果长期大于50%,优化程序;
- sy: 内核进程消耗的CPU时间百分比;
- us+sy参考值为80%,如果us+sy大于80%,说明可能存在CPU不足
- id: 处于空闲的CPU百分比
- wa: 系统等待IO的CPU时间百分比
- st:来自于一个虚拟机偷取的CPU时间的百分比
-
查看多核cpu核信息
mpstat -P ALL2(两秒采样一次所有cpu信息)
-
每个进程使用cpu的用量分解信息
pidstat -u 1 -p 进程编号(每秒钟采样一次这个进程的cpu占用信息)
内存:free
- free -m (查看可用内存 M为单位)
- 内存情况
- 内存充足: 应用程序可用内存/系统物理内存 > 70%
- 内存不足,需要增加内存: 应用程序可用内存/系统物理内存 < 20%
- 内存基本够用:20%<应用程序可用内存<70%
- 详细查看
pidstat -p 进程号 -r 采样间隔秒数 (每条采样一次这个进程的内存占用信息)
硬盘:df 硬盘使用量
- df -h
磁盘IO: iostat
-
iostat -xdk 23
- rkB/s 每秒读取数量量 kB;
- wkB/s 每秒写入数量量 kB;
- svctm I/O请求的平均服务时间,单位毫秒;
- await I/O请求的平均等待时间,单位毫秒;值越小,性能越好;
- util -秒钟有百分几的时间用于I/O操作。接近100%时,表示磁盘宽带跑满,需要优化程序或者增加磁盘;
- rkB/s 、wkB/s根据系统应用不同会有不同的值,但有规律遵循;长期、超大数据读写,肯定不正常,需要优化程序读取;
- svctm的值与await 的值很接近,表示几乎没有I/O等待,磁盘性能很好
- 如果await的值远高于svctm的值,则表示I/O队列等待太长,需要优化程序或更换更快磁盘。
-
详细查看 对应进程的读写情况
pidstat -d 采样间隔秒数 -p 进程号
网络IO:ifstat
- 命令安装
wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
tar xzvf ifstat-1.1.tar.gz
cd ifstat-1.1
./configure
make
make install
- 查看
# 进入ifstat 目录
./ifstat