web界面获取组件信息转圈3~5s显示问题分析
更新时间: 2026/05/28
在Gitcode上查看源码问题背景
- 单板类型:NA
- 软件版本:NA
- 涉及功能:组件信息显示。
- 触发条件:调用curl命令来获取智能网卡温度,导致web界面卡顿。
- 业务表现:预期web页面流畅显示内容;实际web界面获取组件信息转圈3~5s显示。
问题复现步骤
- 调用skynet fork线程去获取智能网卡温度,获取方式是通过curl命令curl.easy_perform调用redfish url来获取智能网卡温度。
- web界面获取组件信息,一直在转圈3~5s之后才显示出来信息。
关键日志信息
使用worker获取不同组件的温度,3s超时一次,循环获取:
text
2000-02-25 16:06:42.430477 unknown_service ERROR: worker: call_redfish, uri=/redfish/v1/Chassis/1/Sensors/CPU_Temp, err=Timeout was reached
2000-02-25 16:06:42.430678 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/CPU_Temp, g_count=15
2000-02-25 16:06:42.430824 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/CPU_Temp, error: Timeout was reached
2000-02-25 16:06:42.430964 unknown_service ERROR: worker: call_redfish1111-0, curl_uri=https://169.254.15.20/redfish/v1/Chassis/1/Sensors/M2Zone_Temp
2000-02-25 16:06:45.550750 unknown_service ERROR: worker: call_redfish, uri=/redfish/v1/Chassis/1/Sensors/M2Zone_Temp, err=Timeout was reached
2000-02-25 16:06:45.550966 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/CPU_Temp, g_count=16
2000-02-25 16:06:45.551113 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/M2Zone_Temp, error: Timeout was reached
2000-02-25 16:06:45.551264 unknown_service ERROR: worker: call_redfish1111-0, curl_uri=https://169.254.15.20/redfish/v1/Chassis/1/Sensors/NIC_OPT0_Temp
2000-02-25 16:06:48.673682 unknown_service ERROR: worker: call_redfish, uri=/redfish/v1/Chassis/1/Sensors/NIC_OPT0_Temp, err=Timeout was reached
2000-02-25 16:06:48.674062 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/CPU_Temp, g_count=17
2000-02-25 16:06:48.674235 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/NIC_OPT0_Temp, error: Timeout was reached
2000-02-25 16:06:48.674387 unknown_service ERROR: worker: call_redfish1111-0, curl_uri=https://169.254.15.20/redfish/v1/Chassis/1/Sensors/FPGA_Temp
2000-02-25 16:06:51.790993 unknown_service ERROR: worker: call_redfish, uri=/redfish/v1/Chassis/1/Sensors/FPGA_Temp, err=Timeout was reached
2000-02-25 16:06:51.791344 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/CPU_Temp, g_count=18
2000-02-25 16:06:51.792173 unknown_service ERROR: worker: call_redfish url: /redfish/v1/Chassis/1/Sensors/FPGA_Temp, error: Timeout was reached
2000-02-25 16:06:51.792845 unknown_service ERROR: worker: call_redfish1111-0, curl_uri=https://169.254.15.20/redfish/v1/Chassis/1/Sensors/NIC_OPT1_Temp定位过程
调用skynet fork执行获取智能网卡温度,获取智能网卡温度流程会有3~5s卡顿
获取智能网卡温度需要使用curl命令,发现curl.easy_perform是串行阻塞的,参考指导:worker_core 后台工作线程库 | openUBMC。
问题原因
调用阻塞性API的C库会导致进程下的资源树访问阻塞、组件心跳丢失的情况。
解决方案
需要使用框架提供的worker库,创建worker线程,将阻塞操作在worker线程中执行。
注意:local w = worker.new(0)要定义为全局变量,避免出现使用worker_core执行获取智能网卡温度curl动作之后,还是出现属性获取失败,web卡顿问题。