乐趣区

关于linux:Linux常用命令与服务器异常分析与定位

一、引言

二、常用命令

#CentOS 装置零碎状态命令,以下性能指标命令没有的能够尝试装置
yum install -y sysstat

整机性能指标命令

1、top 命令

# 查看整机零碎性能命令
top -H

# -H 能够查看由某个过程启动的所有线程,p 指定要看的过程
top -Hp 6106 

  • load average:三组数字别离示意为 1 分钟、5 分钟、15 分钟 CPU 负载的状况。以一个单核的机器为例,load=0.5 示意 CPU 还有一半的资源能够解决其余的线程申请,load= 1 示意 CPU 所有的资源都在解决申请,没有残余的资源能够利用了,而 load= 2 则示意 CPU 曾经超负荷运作,另外还有一倍的线程正在期待解决。多核处理器中,你的 load average 不应该高于处理器外围的总数量。

阐明:该命令用来从全局的角度查看整机零碎性能。

2、uptime 命令

#top 命令的简化版
[root@localhost home]# uptime
 22:43:42 up  1:06,  2 users,  load average: 0.97, 0.74, 0.40

CPU 性能指标命令

1、vmstat 命令

# 每两秒采样一次,共采样 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
  • procs
我的项目 含意
r 运行和期待 cpu 工夫片的过程数,原则上 1 核的 cpu 的运行队列不要超过 2,整个零碎的运行队列不要超过总核数的 2 倍
b 期待资源的过程数,比方正在期待磁盘 I /O、网络 I / O 等
  • cpu
我的项目 含意
us 用户过程耗费 cpu 工夫百分比,us 值高,代表用户过程耗费 cpu 工夫多,如果长期大于 50%,须要优化程序
sy 内核过程耗费的 cpu 工夫百分比,us+sy 参考值为 80%,超过此阈值表明 cpu 负荷过大
id 处于闲暇的 cpu 百分比
wa 零碎期待 IO 的 cpu 工夫百分比
st 来自于一个虚拟机窃取的 cpu 工夫百分比

阐明:该命令次要用来查看 cpu 的一些指标(蕴含但不限于)。

2、mpstat(Multiprocessor Statistics)命令

# 查看所有 cpu 外围的信息,2 秒采样一次共三次,-P {|ALL} 示意监控哪个 CPU,cpu 在 [0,cpu 个数 -1] 中取值
mpstat -P ALL 2 3

阐明:查看所有 cpu 核信息,其报告与 CPU 的一些统计信息,这些信息寄存在 /proc/stat 文件中。在多 CPUs 零碎里,其岂但能查看所有 CPU 的均匀情况信息,而且可能查看特定 CPU 的信息。

3、pidstat 命令

# 查看 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 的信息。

内存指标命令

1、free 命令

# 默认单位 kb
free

#指定单位 mb
free -m

#指定单位 gb
free -g

磁盘指标命令

1、df 命令

# 查看磁盘残余空间
df -h

IO 指标命令

1、iostat 命令(磁盘 IO)

# 查看磁盘 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 等待时间太长,待优化。

1、ifstat 命令(网络 IO)

# 查看网络 IO 情况
ifstat 1

三、服务器异样剖析与定位

1、JAVA 程序 CPU 占用过高的剖析思路与定位

制作一个简略的 CPU 密集计算的 java 程序,而后再服务器上跑起来,以此实例来模仿生产环境 CPU 占用过高的场景。

# 编译
javac WhileTrueDemo.java -d

#运行示例程序,造成 CPU 密集计算
nohup java com.jayway.WhileTrueDemo &

具体步骤

  • 先用整机性能命令 top 找出 CPU 占比最好的过程

阐明:通过 top 命令根本能够看出 PID 为 6106 的过程 CPU 占用过大。

  • 利用 ps 后者 jps 进一步定位
# 采纳 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 工夫也最多,从它下手持续剖析。

  • 将须要的线程 ID 转换为 16 进制英文小写格局
# 转换线程号 6107 为 16 进制英文小写,后果为:17db
printf "%x\n" 6107
  • java 程序采纳 jstack 命令查看 java 堆栈信息,定位具体问题
# 过程号为 6106,查找问题线程号 17db(16 进制英文小写)
jstack 6106 | grep 17db -C10

阐明:从上图就能够看出 WhileTrueDemo 文件的第八行代码是问题的本源。

退出移动版