#CentOS安装系统状态命令,如下性能指标命令没有的能够尝试安装 yum install -y sysstat
#查看整机系统性能命令 top -H # -H 能够查看由某个进程启动的全部线程 ,p指定要看的进程 top -Hp 6106
说明:该命令用来从全局的角度查看整机系统性能。java
#top命令的简化版 [root@localhost home]# uptime 22:43:42 up 1:06, 2 users, load average: 0.97, 0.74, 0.40
#每两秒采样一次,共采样3次 [root@localhost home]# vmstat -n 2 3 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 427172 2116 342488 0 0 23 4 494 564 3 7 91 0 0 1 0 0 427172 2116 342520 0 0 0 65 4586 4940 20 26 54 0 0 2 0 0 427172 2116 342524 0 0 0 0 4589 4940 20 25 54 0 0
项目 | 含义 |
---|---|
r | 运行和等待cpu时间片的进程数,原则上1核的cpu的运行队列不要超过2,整个系统的运行队列不要超过总核数的2倍 |
b | 等待资源的进程数,好比正在等待磁盘I/O、网络I/O等 |
项目 | 含义 |
---|---|
us | 用户进程消耗cpu时间百分比,us值高,表明用户进程消耗cpu时间多,若是长期大于50%,须要优化程序 |
sy | 内核进程消耗的cpu时间百分比,us+sy参考值为80%,超过此阈值代表cpu负荷过大 |
id | 处于空闲的cpu百分比 |
wa | 系统等待IO的cpu时间百分比 |
st | 来自于一个虚拟机窃取的cpu时间百分比 |
说明:该命令主要用来查看cpu的一些指标(包含但不限于)。ios
#查看全部cpu核心的信息,2秒采样一次共三次,-P {|ALL} 表示监控哪一个CPU, cpu在[0,cpu个数-1]中取值 mpstat -P ALL 2 3
说明:查看全部cpu核信息,其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看全部CPU的平均情况信息,并且可以查看特定CPU的信息。服务器
#查看cpu的信息,每秒钟采样1次共采样5次,-p指定具体进程编号 pidstat -u 1 5 -p 1796 #查看内存信息,每秒钟采样1次共采样5次,-p指定具体进程编号 pidstat -r 1 5 -p 1796 #查看磁盘信息,每秒钟采样1次共采样5次,-p指定具体进程编号 pidstat -d 1 5 -p 1796
说明:查看某个具体的进程使用cpu的信息。网络
#默认单位kb free #指定单位mb free -m #指定单位gb free -g
#查看磁盘剩余空间 df -h
#查看磁盘IO情况,2秒采样一次共三次 iostat -xdk 2 3
项目 | 含义 |
---|---|
rkB/s | 每秒读取数据量kb |
wkB/s | 每秒写入数据量kb |
svctm | IO请求的平均服务时间,单位毫秒 |
await | IO请求的平均等待时间,单位毫秒,值越小越好 |
util | 一秒中有百分之几的时间用于IO操做,接近100%时,表示磁盘带宽盘满,须要优化程序或增长磁盘 |
说明:rkB/s、wkB/s长期超大的数据读写,确定不是正常现象;svctm与await值很接近,表示几乎没有IO等待,磁盘性能好,若是await值远高于svctm的值,表示IO等待时间太长,待优化。性能
#查看网络IO情况 ifstat 1
制造一个简单的CPU密集计算的java程序,而后再服务器上跑起来,以此实例来模拟生产环境CPU占用太高的场景。优化
#编译 javac WhileTrueDemo.java -d #运行示例程序,形成CPU密集计算 nohup java com.jayway.WhileTrueDemo &
说明:经过top命令基本能够看出PID为6106的进程CPU占用过大。spa
#采用ps命令进一步查看搞事的java程序 [root@localhost home]# ps -ef | grep java | grep -v grep root 6106 1460 99 22:09 pts/0 00:52:15 java com.jayway.WhileTrueDemo #采用java自带命令查看 [root@localhost home]# jps -l 6106 com.jayway.WhileTrueDemo 6238 sun.tools.jps.Jps
#-m 显示全部的线程 #-p pid进程使用CPU的时间 #-o 该参数后是用户自定义格式 ps -mp 6106 -o THREAD,tid,time
说明:从上图可知6107这个线程占用的CPU最多而且占用CPU时间也最多,从它下手继续分析。线程
#转换线程号6107为16进制英文小写,结果为:17db printf "%x\n" 6107
# 进程号为6106,查找问题线程号17db(16进制英文小写) jstack 6106 | grep 17db -C10
说明:从上图就能够看出WhileTrueDemo文件的第八行代码是问题的根源。3d