场景:http客户端请求,服务器响应时长很长,进入controller日志也未打印。服务端java项目,Linux服务器部署
1、分析服务器磁盘是否有瓶颈
监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况
#pidstat 需要安装,无法连外网可能无法用
pidstat -d -p 替换成实际进程号 1 3
在Debian/Ubuntu系统中可以使用下面的命令来安装: apt-get install sysstat
CentOS/Fedora/RHEL版本的linux中则使用下面的命令: yum install sysstat
pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
-u:默认的参数,显示各个进程的cpu使用统计
-r:显示各个进程的内存使用统计
-d:显示各个进程的IO使用情况
-p:指定进程号
-w:显示每个进程的上下文切换情况
-t:显示选择任务的线程的统计信息外的额外信息
-T { TASK | CHILD | ALL }
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
-V:版本号
-h:在一行上显示了所有活动,这样其他程序可以容易解析。
-I:在SMP环境,表示任务的CPU使用率/内核数量
-l:显示命令名和所有参数
2、分析当前处理的业务数量
获取当前连接数,将实时数据生成到"/root/a.txt "文件
netstat -napt >/root/a.txt
排除一下是否是业务量突增,导致的单节点无法负荷,进行多节点部署。
3、分析连接的保持时长
从a.txt中随机选择几个端口号
lsof -p 替换成实际进程号| grep 端口号
端口号:是第二步中的任意一个端口号
# lsof -p 13388 | grep 29526
-- snipped --
java 13388 root 328u IPV6 12235791 TCP ****03:20007->10.158.244.18:29526 (ESTABLISHED)
查看连接的创建时间
ll /proc/{
pid}/fd/{
fd}
#{fd} lsof -p 第四列的值
ll /proc/13388/fd/328
lrwx------