一. 基本调试命令
一般我们的服务器都是跑在Linux上的,所以我们要熟悉常用的Linux命令
1. 整机:
1. top 系统性能
2. uptime 精简版
3. oad average:系统负载均衡 1min 5min 15min 系统的平均负
载值相加除3大于60%就代表压力过大
2. CPU:
1. vmstat:查看CPU参数
vmstat -n 2 3
第二个参数是采样的时间间隔数单位s,
第三个参数是采样的次数
procs
r:运行和等待CPU时间片的进程数,原则上1核CPU的运行队列不要超过2,多核系统的运行队列不能超过总核数的2倍,
否则表示系统压力过大
b:等待资源的进程数,比如正在等待磁盘I/O,网络I/O等
cpu
us:用户进程消耗cpu时间百分比,us高,用户进程消耗cpu时间多,如果长期大于50%,优化程序
sy:内核进程消耗的cpu时间百分比
us+sy:参考值为80%,如果大于80,说明可能存在cpu不足
id:处于空闲的cpu百分比
wa:系统等待IO的cpu时间百分比
st:来自于一个虚拟机偷取的cpu时间的百分比
3. 查看额外
查看所有cpu核信息:
mpstat -P ALL 2
每个进程使用cpu的用量分解信息:
pidstat -u 1 -p 进程编号
4. 内存:free
查看内存:
free -m free -g
pidstat -p
进程编号 -r 采样间隔秒数
5. 硬盘:df
查看磁盘剩余空间:
df -h
6. 磁盘IO:iostat
磁盘I/O性能评估:
iostat -hdk 2 3
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 进程号
7. 网络IO:ifstat
ifstat l
二. 加入生产环境CPU占用过高,谈谈分析思路和定位?
1. 结合Linux和JDK命令一块分析
1. 步骤:
1. 先用top命令找出cpu占比最高的
2. ps -ef或者jps进一步定位,得知是一个怎样的后台程序在搞事
1) jps -l
2) ps -ef|grep java|grep -v grep
3. 定位到具体线程或者代码
定位到具体线程:
ps -mp 进程编号 -o Thread,tid,time
-m :显示所有的线程
-p pid 进程使用cpu的时间
-o:该参数后是用户自定义格式
4. 将需要的线程ID转换为16禁止格式(英文小写格式)
printf "%x\n" 线程ID
5. 查看运行轨迹,堆栈异常信息
jstack 进程Id|grep tid(16进制线程id小写英文) -A60
总结:在生产中碰到各种服务器问题可以使用命令去查找问题,这样是从底层出发,更加容易找到问题,解决问题。
下一篇:GitHub的骚操作