我一直在开发一个支持网络的应用程序并在 127.0.0.1 (localhost) 上对其进行测试。该应用程序完全受内存限制,即它从不接触硬盘。
测试的过程是与应用程序连接,然后用静态生成的数据淹没它,这些数据会回显到源。在回显预定义的数据量(兆字节)后,我测量自开始以来经过的时间(计时器在建立套接字连接后启动)。
应用程序可以交替使用普通的 TCP 套接字或等效的 unix 域套接字。
从今天早上(星期六)印度时间开始,在 127.0.0.1(本地主机)上运行的应用程序的吞吐量(以传输的数据的 MB/s 衡量)减慢了 3 倍。此后我没有对应用程序进行任何更改过去 5 天。
为了 100% 确定,我用同一个应用程序的旧版本(最长 12 个月)重复了测试,所有这些都显示出同样的速度减慢。
为了确保我将应用程序切换到 Unix Domain Socket 并且测量结果与旧结果相同(没有减慢速度)。
在最近的更新之后,专门处理 TCP/IP 的内核或网络驱动程序中的某些内容似乎已损坏。
是否有快速解决此问题的方法?
从 Linux 内核 4.15.0-36-generic 降级到 4.15.0-34-generic 为我解决了这个问题。正如最初所怀疑的那样,升级后专门处理 TCP/IP 的东西坏了。
要降级,我在重启后反复按 ESC 键进入 Grub 菜单并从“高级选项”中选择特定内核(不是恢复模式)。