web容器cpu飙高的原因排查方法
web容器cpu飙高的原因排查方法
1.问题背景
web容器cpu飙高导致前端bi访问卡顿,慢等问题,如何排查是什么原因导致的web容器cpu飙高
2.排查方法
2.1 监控+后台日志方法排查
首先通过有数BI后台的监控,确定web容器cpu飙高的时间和分别是哪些web容器cpu使用率飙高


通过监控确定了时间和具体是哪些web容器后,然后通过模块粒度日志排查,模块粒度日志会把当时时间段内这个容器内的所有请求都打印出来,按时间降序可以看在那个时间段内哪些接口请求耗时时间长,通过接口方便定位当时是什么原因导致的(注意:时间排序降序,升序最好都看下,因为有些阻塞的接口,可能是delay 是 null 的,还没有响应,所以没有结束时间)

同时也可以搜索具体的接口来判断,比如 api/dash/report/exportExcel(导出),/api/dash/survey/data/verify(填报),/api/dash/exportImport/exportReport(资源导出),/api/dash/exportImport/importReport(资源导入)等带export,survey的接口

2.2有数业务库方法排查
导致web容器cpu飙高的原因主要 跟导出,数据填报,资源导出,资源导入等原因有关,也可以通过有数业务库直接查询对应时间内的日志情况。以下是相关表信息:
export_excel_task 导出记录表
export_import_task 资源迁移导出导入记录表
survey_data 填报数据表
survey_submit 填报提交记录表
以导出记录表示例SQL如下,其中duration_seconds就是对应导出记录的耗时时间,下面示例中可以看出时间段内导出任务较多,而且耗时时间很长,是影响web容器cpu飙高的主要原因。
select id,project_id,report_id,dashboard_id,component_id,
component_name,report_name,status,type,export_type,
create_time,modify_time,TIMESTAMPDIFF(SECOND, create_time, modify_time) AS duration_seconds
from youdata.export_excel_task
where create_time >'2025-12-08 11:25:00' and create_time < '2025-12-08 11:45:00'
order by duration_seconds desc

2.3 服务器日志排查方法
服务器日志排查方法可以在web容器cpu飙高期间去抓取web容器的cpu和内存日志,将对应日志拿出来给研发侧排查当时web容器内有哪些行为导致的cpu飙高。(注意:该方法只能在web容器飙高期间抓取,有时效性)
1.进入web容器,执行ps -aux | grep platform

2.注意路径
node ./node_modules/xtransit/commands/xprofctl.js 16 start_cpu_profiling {}
等待2分钟
node ./node_modules/xtransit/commands/xprofctl.js 16 stop_cpu_profiling {}
3.生成日志目录

4.docker cp出来到物理机就行
5.抓内存,持续一会 自己会输出日志到/www/node_modules/xtransit/
node ./node_modules/xtransit/commands/xprofctl.js 9 heapdump {}
以上内容对您是否有帮助?