You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

排查方向及解决建议

  1. HashMap并发问题:线程栈显示卡在HashMap$HashIterator.nextNode,大概率是并发场景下HashMap结构损坏(如扩容时并发修改),或高频遍历大体积HashMap导致CPU占用过高。

    • 检查自定义HTTP拦截器、扩展插件是否在并发场景下修改共享HashMap结构,或频繁遍历大HashMap。
    • 若为自定义代码问题,替换HashMap为线程安全的ConcurrentHashMap。
  2. NIO反应器事件堆积:线程属于HTTPS-Listener的I/O调度器,卡在事件遍历环节,可能是请求量过载、连接泄漏导致事件队列异常堆积。

    • 调整passthru HTTP线程池配置:增加worker_threads或io_threads参数,确保I/O调度线程能及时处理事件。
    • 排查是否存在大量超时请求未释放连接,导致事件循环无法正常结束。
  3. JVM参数修正:Java 11中-XX:MaxPermSize已废弃,改用-XX:MaxMetaspaceSize=1024m;添加-XX:+UseG1GC等GC参数优化垃圾回收,避免GC引发的CPU波动。

  4. 官方补丁适配:WSO2 APIM 4.1.0存在NIO反应器相关的已知性能问题,建议安装官方发布的HTTP/NIO组件最新补丁。


内容的提问来源于stack exchange,提问作者Hamza Iqbal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:12:04