HTTP传输接收服务的一次CPU占比100%排查

笔者有个HTTP数据接收的项目上线,接收了大量的客户端HTTP请求,部署在三台LINUX 服务器上。

linux服务器64G内存,操作系统为CENT OS7.6

WEB容器采用TOMCAT9.0,服务端程序使用JAVA 开发,JDK版本为1.8,负责接收客户端持续不断的JSON请求,服务端将JSON解析为JAVA对象,并对每个对象的属性作合法性验证(比如,某个属性必须是16位的数字和字母且允许|间隔等待)以及相关性验证(比如 某个值必须等于A+B+C)。

上线几日来,每天接收80万的基本流水以及800万条的扩展流水。

上线首日,客户端(发送HTTP请求)报告有大量的连接超时(每次请求达到几十秒才能完成,正常时至多几十毫秒一次请求即可得到服务器200的响应)。

登录到服务端服务器排查:

在控制台命令行输入 top -c 命令,目的是显示进程运行信息列表,在屏幕显示中找到CPU占比最高的进程。

比如,最耗CPU的进程是PID为10165的进程,将ID记录下来。

在控制台命令行输入top -Hp 10165 ,显示一个进程的线程运行信息列表。

进程10165内,最耗CPU的线程PID为10604。

在控制台输入 printf “%x” 10604 将线程ID转换为16进制 ,比如 296c。

在控制台输入  jstack 10165|grep 296c -A 30   用于显示该线程的代码堆栈:

[root@localhost qf]# jstack 10165|grep 296c-A 30
"http-nio-9088-exec-43

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安优小青和他的程序生活

我的文档对您有很大的帮助吗?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值