gpt4 book ai didi

centos - 为什么我的基于 Netty 的 TCP 服务器在 100% CPU 使用率时挂起?

转载 作者:行者123 更新时间:2023-11-29 09:12:45 24 4
gpt4 key购买 nike

我开发了一个基于 Netty 的 TCP 服务器来接收与基于 GSM/GPRS 的设备的保持连接并将这些数据保存在 MySql 数据库中。当前处理了 5K 个连接。设备以 30-60 秒的间隔发送定期消息,但连接保持 Activity 状态以维持双工通信。

服务器应用程序在正常运行中消耗 1-2% 的 CPU,峰值高达 10%,平均负载非常低。然而,在正常运行 6 到 48 小时后,服务器应用程序挂起,CPU 占用率始终为 100%,线程转储表明 epoll 选择器是 CPU 使用率高的原因。应用程序仍然保持连接几个小时,然后 CPU 消耗增加到 200%,大部分连接被释放。

在项目开始时,我们使用 MINA 并遇到了 1K Activity 连接的相同问题,这就是我们切换到 Netty 的原因。在 5K 连接之前,Netty 稳定得多,挂断时间为 1-2 周。

我们的服务器配置:

  • I7-2600 四核 CPU,
  • 8 GB 内存,Centos 5.0,
  • 打开 JDK 6.0,
  • Netty 3.2.4(几小时前Netty更新到3.5.2)

为了克服这个问题我们将更新JDK到7.0(JDK有一个新的针对异步操作优化的I/O实现)并尝试不同的操作系统包括FreeBSD, Windows Server,因为每个操作系统都有不同的 I/O 处理策略。

任何帮助将不胜感激,谢谢..

最佳答案

这听起来像是 Epoll 错误。

该应用程序正在代理与后端系统的连接。代理有一个 channel 池,可用于将请求发送到后端系统。如果池中的 channel 不足,则会生成新 channel 并将其放入池中,以便可以为发送到代理的请求提供服务。池会在应用程序启动时填充,这就是为什么 CPU 很快就会达到峰值(进入应用程序生命周期的 22 秒)。 Source

Netty 有一个内置的解决方法。虽然不确定是哪个版本,但必须稍后更新。

System.setProperty("org.jboss.netty.epollBugWorkaround", "true");

关于centos - 为什么我的基于 Netty 的 TCP 服务器在 100% CPU 使用率时挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11382961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com