WSO2 APIM 4.1.0 CPU占用过高问题求助(附线程栈信息)
WSO2 APIM 4.1.0 CPU占用率过高问题求助
我在使用WSO2 APIM 4.1.0版本时遇到CPU占用率高达100%甚至超过100%的问题,top命令输出如下:
top - 13:40:47 up 36 days, 22:45, 1 user, load average: 14.81, 8.55, 4.87 Tasks: 442 total, 1 running, 441 sleeping, 0 stopped, 0 zombie %Cpu(s): 42.4 us, 3.5 sy, 0.0 ni, 54.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 86454.3 total, 58039.9 free, 11559.4 used, 16855.1 buff/cache MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 74008.5 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1492023 dts 20 0 33.9g 8.4g 32376 S 1462 9.9 177:43.34 java
我已按照官方性能调优文档尝试以下配置,但未产生任何效果:
系统资源限制配置
- soft nofile 4096
- hard nofile 65535
- soft nproc 20000
- hard nproc 20000
JVM级配置
-DentityExpansionLimit=10000 -Xms8192m -Xmx14336m -XX:MaxPermSize=1024m
WSO2 Carbon平台级配置
<Valve className="org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve" threshold="500"/> <!-- 默认值为600 -->
API-M级配置
[passthru_http] http.socket.timeout=180000
高CPU线程列表
%CPU CPU NI S TIME PID TID 0.0 - 0 S 00:00:01 209032 210148 15.7 - 0 R 00:28:49 209032 210149 65.9 - 0 R 02:00:56 209032 210150 65.8 - 0 R 02:00:45 209032 210151 21.8 - 0 R 00:40:07 209032 210152 0.0 - 0 S 00:00:00 209032 210153 19.3 - 0 R 00:35:24 209032 210154 26.0 - 0 R 00:47:40 209032 210155 0.0 - 0 S 00:00:00 209032 210156 16.0 - 0 R 00:29:27 209032 210157 70.8 - 0 R 02:09:51 209032 210158 7.4 - 0 R 00:13:39 209032 210159 14.9 - 0 R 00:27:27 209032 210160 0.0 - 0 S 00:00:00 209032 210161 11.2 - 0 R 00:20:33 209032 210162 23.3 - 0 R 00:42:50 209032 210163
高CPU线程(0x334ee)完整线程栈
OpenJDK 64-Bit Server VM (11.0.22+7-post-Ubuntu-0ubuntu220.04.1 mixed mode): Threads class SMR info: _java_thread_list=0x00007fe27c013ca0, length=1456, elements={ 0x00007feda83d9800, 0x00007feda83dd800, 0x00007feda83f9000, 0x00007feda83fb000, 0x00007feda83ff800, 0x00007feda8401000, 0x00007feda8403000, 0x00007feda8463000, "HTTPS-Listener I/O dispatcher-47" #514 prio=5 os_prio=0 cpu=7776550.97ms elapsed=10986.44s tid=0x00007fe11407d800 nid=0x334ee runnable [0x00007fde7fc7e000] java.lang.Thread.State: RUNNABLE at java.util.HashMap$HashIterator.nextNode(java.base@11.0.22/HashMap.java:1515) at java.util.HashMap$KeyIterator.next(java.base@11.0.22/HashMap.java:1534) at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:313) at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276) at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104) at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591) at java.lang.Thread.run(java.base@11.0.22/Thread.java:829)
排查方向及解决建议
HashMap并发问题:线程栈显示卡在
HashMap$HashIterator.nextNode,大概率是并发场景下HashMap结构损坏(如扩容时并发修改),或高频遍历大体积HashMap导致CPU占用过高。- 检查自定义HTTP拦截器、扩展插件是否在并发场景下修改共享HashMap结构,或频繁遍历大HashMap。
- 若为自定义代码问题,替换HashMap为线程安全的
ConcurrentHashMap。
NIO反应器事件堆积:线程属于HTTPS-Listener的I/O调度器,卡在事件遍历环节,可能是请求量过载、连接泄漏导致事件队列异常堆积。
- 调整passthru HTTP线程池配置:增加
worker_threads或io_threads参数,确保I/O调度线程能及时处理事件。 - 排查是否存在大量超时请求未释放连接,导致事件循环无法正常结束。
- 调整passthru HTTP线程池配置:增加
JVM参数修正:Java 11中
-XX:MaxPermSize已废弃,改用-XX:MaxMetaspaceSize=1024m;添加-XX:+UseG1GC等GC参数优化垃圾回收,避免GC引发的CPU波动。官方补丁适配:WSO2 APIM 4.1.0存在NIO反应器相关的已知性能问题,建议安装官方发布的HTTP/NIO组件最新补丁。
内容的提问来源于stack exchange,提问作者Hamza Iqbal
相关产品推荐
相关产品推荐

