如何判定压力瓶颈在哪里
cpu的瓶颈
-
使用top命令,查看cpu使用率
-
增加压力后,使用命令vmstat查看CS(上线文切换),如果变化异常,说明CS出了问题
-
增加压力后,使用命令vmstat查看r(cpu等待队列),如果数值较高,说明cpu等待队列增加,cpu的问题
压力和内存使用率
- 用命令查看内存占用,top,再按M,按占着内存排序(按P,是按cpu占用排序,按T是按运行时间)
- 用命令 top -Hp pid号 看详细信息
- 用命令pidstat -p pid号 -u -d -t -w -h 1 1000(1秒钟刷新一次,刷新1000次)
- 查看上下文切换,如果切换高,也会占用内存
- 使用free -h 查看av'a'ilable(可用剩余内存)
当发生内存泄漏时(out of memory)
- TPS骤降
- 内存基本无可用,突然释放,再次耗光
- 使用dmesg -T查看操作系统日志是否触发out of memory
- 该日志存于/var/log/messages
网络三次握手
四次挥手
查看网络队列,判断瓶颈点
- netstat -naop|more
- 查看字段Recv-Q、Send-Q
- Send-Q:发送队列中没有被远程主机确认的bytes数
- Recv-Q:就是指接受的数据还在缓存中,还没被进程读取,这个值就是还没有被进程读取的bytes:一般是CPU处理不过来导致的。
- 根据Recv-Q、Send-Q判断瓶颈点在哪里
- 修改半链接队列,和accept队列
- 使用命令:sysctl -a | grep net.core.somaxconn来查看对应数值
- 使用命令:sysctl -w net.core.somaxconn=1024来修改对应值
- 永久生效方法:在/etc/sysctl.conf文件中新增一行:net.core.somaxconn=1024,执行sysctl -p
netstat命令介绍
- netstat -nlpt 可以查看进程使用的端口和队列
- netstat -naop 可查看进程是否长短链接
iftop找网络带宽和端口对应关系
- ifconfig找对应网卡
- iftop -i ens192 -n -P (-n 将host以ip显示,-P将端口和IP显示出来,-i 设定监测网卡)
- peak显示打开iftop后带宽峰值
- cum显示打开iftop后的总流量
- TX:发送的数据
- RX:接受的数据
- rates:过去2S,10S,40S的平均流量
- 使用iftop可以找到占用带宽的端口,然后使用netstat查到端口对应的进程
例子:带宽占用很高
- 使用iftop -i ens192 -n -P 查找到了端口为277的程序占用带宽很高
- 使用 netstat -ap|grep 277 查找到端口为277的进程号:2208
- 使用lsof -p 2208 查看2208的进程所有文件
sysctl -a查看操作系统参数
- sysctl -a | grep tcp 查询网络参数
- 使用命令:sysctl -w net.core.somaxconn=1024来修改对应值
- 永久生效方法:在/etc/sysctl.conf文件中新增一行:net.core.somaxconn=1024,执行sysctl -p
- 当发现系统参数不够用时,查询对应参数什么意思,去调整