对于分布式Java应用而言,网络IO消耗非常值得关注,尤其要注意网卡中断是不是均衡分配到各CPU的(可通过cat/porc/interrupts查看)。对于网卡中断只分配到一个CPU的现象,google采用kernel的方法对网卡中断分配不均的问题进行修复,据其测试性能大概能提升3x左右,或是采用支持MSI-X的网卡来修复。
在Linux中可以采用sar来分析网络IO的消耗状况
输入 sar -n FULL 1 2
执行后以1秒为频率,总共输出两次网络IO的消耗情况
输出信息主要有三部分
1、为网卡上成功接包和发包的信息,报告信息主要有rxpck/s、txpck/s、rxbyt/s\rxmcst/s;
2、网卡上失败的接包和发包的信息,报告信息主要有rxerr/s、txerr/s、rxdrop/s、txdrop/s;
3、sockets上的统计信息,报告信息主要有tolsck,tcpsck,udpsck、rawsck
关于这些数值的具体含义可以通过man sar来进行了解,对于JAVA应用而言,使用的主要为tcpsck和udpsck