对于分布式JAVA,网络IO消耗值得关注。尤其要注意网卡中断是不是均衡的分配到各个CPU的。 可通过

1
cat /proc/interrupts 查看

linux中可以通过sar来分析网络IO的消耗情况

sar

输入

1
sar -n FULL 1 2 //以1秒为频率,总共输出2次网络IO消耗情况

对于JAVA应用而言,使用的主要是tcpsck和udpsck

用JAVA实现的网络通信,通常要将对象序列化为字节流进行发送,或者读取字节流,并反序列化为对象。 这个过程需要消耗JVM堆内存,而堆内存大小是有限的,因此一般JAVA不会造成网络IO的消耗严重

总结

  • 如果网络IO过高,表明有线程在频繁的序列号发送字节流

    • 可先用sar -n full 1 3 查看tcpsck,udpsck等参数确认,然后结合pidstat和jstack找到对应的代码进行分析。(序列化和反序列化会消耗JVM堆内存,且一般局域网速率都至少千M,一般很少出现网络IO高的问题)
    • 解决方法:限流,调整发送数据包的频率