在一次测试中发现服务器非常卡顿,刚开始任务是网络问题导致,可是别人的服务却可以正常运行,于是进行了一些列排查。
二、排查步骤 2.1 查看内存使用情况## -g表示单位是G,-m 表示单位是m free -g2.2 查看磁盘使用情况
df -h
查看磁盘的 已用 情况是否过高。
## 1 表示没1s刷新一下 iostat -x 1 ## 查看磁盘列表 lsblk
查看磁盘的io情况是否使用过高。
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
参数说明:
d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p:★通过指定监控进程ID来仅仅监控某个进程的状态。
q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S:指定累计模式。
s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i:使top不显示任何闲置或者僵死进程。
c:★显示整个命令行而不只是显示命令名。
## 显示整个命令行而不只是显示命令名。 top -c ## ## 显示进程号为xxx的信息 top -p XXXX2.4.1 第一行:系统运行时间和平均负载
top - 08:43:13 up 8 days, 19:11, 7 users, load average: 1.55, 1.41, 1.25
系统时间:08:43:13
运行时间:up 8 days,
当前登录用户: 7 user
负载均衡(uptime) load average: 0.00, 0.00, 0.00
average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了
2.4.2 第二行:任务(进程)统计信息
Tasks: 661 total, 1 running, 660 sleeping, 0 stopped, 0 zombie
总进程:661 total, 运行:1 running, 休眠:660 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie2.4.3 第三行:cpu状态信息
这里显示不同模式下所占cpu时间百分比,这些不同的cpu时间表示:
%Cpu(s): 1.9 us, 1.2 sy, 0.0 ni, 96.6 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
1.9 us【user space】— 用户空间占用CPU的百分比。 1.2 sy【sysctl】— 内核空间占用CPU的百分比。 0.0 ni【niced】— 改变过优先级的进程占用CPU的百分比 96.6 id【idolt】— 空闲CPU百分比 0.2 wa【wait】— IO等待占用CPU的百分比 0.0 hi【Hardware IRQ】— 硬中断占用CPU的百分比 0.0 st【Software Interrupts】— 软中断占用CPU的百分比2.4.4 第四行:内存状态
1003020k total【物理内存】, 234464k used【使用中的内存】, 777824k free【空闲内存】, 24084k buffers【缓存的内存量】2.4.5 第五行:swap交换分区
2031612k total【交换区总量】, 536k used【使用的交换区总量】, 2031076k free【空闲交换区总量】, 505864k cached【缓冲的交换区总量】
备注: 可用内存=free + buffer + cached
对于内存监控,在top里我们要时刻监控第五行swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了。
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,
第四行中空闲内存总量(free)是内核还未纳入其管控范围的数量。
纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心
PID — 进程id USER — 进程所有者 PR — 进程优先级 NI — nice值。负值表示高优先级,正值表示低优先级 VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA SHR — 共享内存大小,单位kb S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU — `上次更新到现在的CPU时间占用百分比` %MEM — 进程使用的物理内存百分比 TIME+ — 进程使用的CPU时间总计,单位1/100秒 COMMAND — 进程名称(命令名/命令行)
详解
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来
DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
f/F – ★添加或删除top中的显示字段 n – ★设置在进程列表所显示进程的数量 s – ★改变画面更新周期,单位时秒 P – ★以 CPU 占用率大小的顺序排列进程列表 K – ★终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。 c – ★切换显示命令名称和完整命令行。 o或者O:改变显示项目的顺序 l – 关闭或开启第一部分第一行 切换显示平均负载和启动时间信息。 t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示切换显示进程和CPU状态信息。 m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示切换显示内存信息。 N – 排序【PID】以PID的大小的顺序排列表示进程列表 M – 排序【内存占用率】以大小的顺序排列进程列表 T – 排序【根据时间/累计时间进行】 i:忽略闲置和僵死进程。这是一个开关式命令。 S:切换到累计模式。 h – 显示帮助 q – 退出 top W:将当前设置写入~/.toprc文件中。 1 – 数字1 按数字“1”可监控每个逻辑CPU的状况 b – 打开/关闭运行线程【R状态】的加亮效果 x – 打开/关闭运行线程【R状态】排序列的加亮效果 ”shift + >”或”shift + < :★可以向右或左改变排序列2.4.9 其他与cup相关的命令
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l # 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"| uniq # 查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l # 查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c # 查看详细内存信息 cat /proc/meminfo # 监控java线程数: ps -eLf | grep java | wc -l # 监控网络客户连接数: netstat -n | grep tcp | grep 侦听端口 | wc -l2.5 查看网络情况 iftop 2.5.1 安装iftop
官方网站:http://www.ex-parrot.com/~pdw/iftop/
下载与安装:
## 第一步:找个合适的位置下载 wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz ## 第二步:解压 tar zxvf iftop-0.17.tar.gz ## 第三步:打开路径 cd iftop-0.17 ## 第四步:运行配置 ./configure ## 第五步:安装 make && make install2.5.2 监听效果
iftop2.5.3 iftop参数说明
1》iftop 界面相关说明
界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的。
中间的<= =>这两个左右箭头,表示的是流量的方向。 TX:发送流量 RX:接收流量 TOTAL:总流量 Cumm:运行iftop到目前时间的总流量 peak:流量峰值 rates:分别表示过去 2s 10s 40s 的平均流量
2》★iftop 命令的相关参数
最佳实战命令:iftop -nPm 20M 显示ip,端口,最大刻度20M
-i ★设定监测的网卡,如:# iftop -i eth1 -n ★使host信息默认直接都显示IP,如:# iftop -n -P ★显示端口; -m ★设置界面最上边的刻度的最大值,刻度分五个大段显示【指定为带有“K”、“M”或“G”后缀的数字。】,例:# iftop -m 100 -F ★显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0 -B 以bytes为单位显示流量(默认是bits),如:# iftop -B -h(display this message),帮助,显示参数信息 -p 以混杂模式运行,因此不直接通过指定接口的通信量也被计算在内 -b 使流量图形条默认就显示; -f 滤波器代码,使用筛选代码选择要计数的数据包。只对IP数据包进行计数,因此指定的代码计算为(筛选代码)和IP; -l 显示和统计发送到链路本地IPv6地址或来自链路本地IPv6地址的数据报。默认情况下,不显示该地址类别。 -G net6/mask6指定用于流量分析的IPv6网络。mask6的值可以作为前缀长度或数字地址字符串给出,用于更复杂的位掩码。 -c 配置文件指定备用配置文件。如果未指定,iftop将使用~/.IFTOPC(如果存在)。有关配置文件的说明 -t 文本输出模式
3》进入iftop画面后的一些操作命令(注意大小写)
按h ★切换是否显示帮助; 按P ★切换暂停/继续显示; 按n ★切换显示本机的IP或主机名; 按B ★切换计算2秒或10秒或40秒内的平均流量; 按T ★切换是否显示每个连接的总流量; 按l ★L打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息; 按s切换是否显示本机的host信息; 按d切换是否显示远端目标主机的host信息; 按t ★切换显示格式为2行/1行/只显示发送流量/只显示接收流量; 按N ★切换显示端口号或端口服务名称; 按S切换是否显示本机的端口信息; 按D切换是否显示远端目标主机的端口信息; 按p切换是否显示端口信息; 按b切换是否显示平均流量图形条; 按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化; 按j或按k ★可以向上或向下滚动屏幕显示的连接记录; 按1或2或3可以根据右侧显示的三列流量数据进行排序; 按<根据左边的本机名或IP排序; 按>根据远端目标主机的主机名或IP排序; 按o切换是否固定只显示当前的连接; 按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个! 按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢! 按q退出监控。



