我的路由器的嵌入式 Linux 上的 CPU 负载很高

我的路由器的嵌入式 Linux 上的 CPU 负载很高

我希望,只要这个问题涉及到Linux,都可以在这里得到解答:

我有一个DSL路由器来自 Observa Telecom,型号BHS-RTA:

Modem Name :    BHS_RTA
Serial Number : D861940E5088
Time and Date : 2015-12-13 01:30:37
HardwareVersion :   BHS_RTA_R1A
SoftwareVersion :   BHS_RTA_ES_050
Firmware Version :  1.1.3

该设备具有嵌入式Linux,所以我正在检查CPU使用率为了检测可能的过载:

~ $ top
Mem: 19360K used, 4544K free, 0K shrd, 1444K buff, 5240K cached
Load average: 2.04 2.18 2.18

如果我正确理解了意义CPU 使用率(平均负载)概念的一部分,除非我的路由器有 2 核 CPU,否则值 2 或以上表示系统存在某种过载。但扫描是在低网速下执行的(没有大量下载/上传)。

我用另一台路由器重复测试,其型号为ZXHN_H108N固件版本 2.1.1 位于网速低(无大量下载/上传):

~ $ top
Mem: 19036K used, 37504K free, 0K shrd, 1560K buff, 5616K cached
Load average: 2.04 2.17 1.83

这是测试D-Link DSL-2640B固件版本:重负载下的 EU_2.04 路由器(uTorrent 以最大下载速度):

# top
Mem: 30248K used, 30716K free, 0K shrd, 3200K buff, 10828K cached
Load average: 0.48, 0.35, 0.29    (State: S=sleeping R=running, W=waiting)

我的问题是,只要我不敢相信这么简单的路由器具有多核 CPU,就是:

  • 根据top工具报告,我可以说负载平均值为2表明有任何超载在我的路由器中?
  • 有什么我可以配置的吗解决它?也许每次重新启动时都会有一些临时解决方案杀死进程?
  • 可能是什么软件结果这种超载?也许设备挂断了?

更多细节:

  • 每当我top在明显过载的 DSL 路由器(上面的第一个和第二个示例)上重复测试时,值都没有太大不同:1.90、2.05、2.15...等。
  • 所有测试都是用只有1台电脑(台式电脑)连接到 DSL 路由器。
  • 我没有使用 VPN 或 VLAN服务有了这个路由器。只是一些简单的端口转发。
  • 看来所有固件都在其状态最新的版本。

%CPU 保持较低水平(接近 0%)。唯一使用上升一点的进程是logic.例子:

Mem: 21956K used, 1948K free, 0K shrd, 1096K buff, 6088K cached
Load average: 2.34 2.29 2.29
  PID USER     STATUS   VSZ  PPID %CPU %MEM COMMAND
  584 root     RW      4660   583 22.9 19.4 logic
 3284 root     RW      1908  1927  0.5  7.9 top
 1774 root     SW      1908   581  0.1  7.9 telnetd
  619 root     DW      1504     1  0.1  6.2 adslstart
 2644 root     SW       848   583  0.1  3.5 radvd
  596 root     SW      2672     1  0.0 11.1 mini_httpd
  581 root     SW      1916     1  0.0  7.9 inetd
    1 root     SW      1908     0  0.0  7.9 init
 1926 root     SW      1908  1775  0.0  7.9 sh
  610 root     SW      1908     1  0.0  7.9 sh
 1927 root     SW      1908  1926  0.0  7.9 sh
  582 root     SW      1900     1  0.0  7.9 dropbear
  583 root     SW      1856     1  0.0  7.7 pc
 1775 root     SW      1848  1774  0.0  7.7 cmd
 2487 root     SW      1596   583  0.0  6.6 pppd
  587 root     SW      1512   583  0.0  6.3 ip6aac
  586 root     SW      1504   583  0.0  6.2 ramon
  585 root     SW      1504   583  0.0  6.2 ip6mon
  622 root     DW      1504     1  0.0  6.2 adslstart
 2645 root     SW      1480   583  0.0  6.1 dhcp6s
^C966 root     SW      1288  1911  0.0  5.3 3g-mngr

答案1

在你的最后一个top清单中,你看到两个adslstart进程D状态 - 这是你的罪魁祸首。由于某种原因,它陷入了内核模式,这就是内核增加路由器上的平均负载的原因。这是有问题的固件的标志,实际上,可能是有问题的供应商设备驱动程序或类似的东西,除非您的路由器执行一些繁重的磁盘/闪存存储 IO(这不太可能)。如果您没有看到更多正在运行的进程,则实际 CPU 负载(和浪费的热量)接近于零。

也许这adslstart确实以这种方式与设备对话,但这仍然不是正确的事情。内核足够智能,可以判断进程处于内核模式的时间:如果您不断看到平均负载不低于 2.00,那么这两个进程可能会永远卡住。

如果您不能/不希望用更合理的东西替换固件,或者您的设备没有替代固件,那么这是无法修复的,除非您致电制造商并详细解释他们如何弄乱它。

但是,如果设备使用此固件不会出现故障(不会重置、挂起或拒绝为其用户提供服务),那么可以安全地使用此固件运行,然后就可以忘记了。

相关内容