Linux 查看和设置 socket 缓冲区大小
问题背景
最近我们开发的软件在客户现场运行很容易出现丢包现象,由于我们的软件需要接收来自传感器的庞大数据量,一秒钟有数万个数据包,网络带宽可达 200 Mb/s。 然而,当我们出发去到客户现场调试时,发现软件在我们自己的设备上运行良好,而客户的设备依然丢包严重。多年的工作经验使我意识到,这可能是个系统性能问题,常见的性能瓶颈包括 CPU、内存、IO 读写等等。经过初步诊断,我们发现线程的 CPU 占用率、内存使用情况均正常,于是把焦点放在网络 IO 上,也就是说丢包很可能出现在 recv 线程上。最终,当我们在客户的设备上增大 socket 接收缓冲区大小后,丢包现象就消失了。因此,本文介绍在 Linux 系统中查看和设置 socket 缓冲区大小的方法。