1.简单说下数据原理:服务端是c写的socketServer,估算下现在每秒大概发300~400条数据(最近出问题),以前每秒大概100条时很正常;
客户端是我的java端写的,接收数据后直接扔到消息队列中;我这就是:
while(true)
{
readLine();
然后扔队列;
}2.问题:
1.最近socket 时不时被服务端断开,我估计那边有问题,但他们还没找出问题;
2.随着时间推移,客户端收到的数据越来越少。,很多数据都丢失了,但是重启后进行重新连接,数据又正常了,但是不知道过多久后又会少数据,我这边socket的接收缓冲区已经加大了,默认8*1024,已经改成32*1024,还是会出现问题;
3.这样看来,socket连接是连着的,不然啥数据也收不到,就是少了大部分数据,我现在这边已经各种处理了,很怀疑是服务端的问题

解决方案 »

  1.   

    我只要重启任何一端,重新连上后数据就正常了;---------------------后期的解决办法----------增加tomcat jvm JAVA_OPTS="-server -Xms1024m -Xmx4096m -XX:PermSize=128M  -XX:MaxPermSize=512m "
    数据清理放在晚上三点进行同一删除
    -------------------------------------------------------------------------------------------------------------------------------------------------------------10-27--------------------------------------
    socket.setReceiveBufferSize(32*1024);
    增加缓冲器区大小试试看看效果
    ----------------------------------------------------------------------------现在看起来是正常了,再也没出现问题,包括之前偶尔会出现的数据库连接失效的问题,我觉得是对jvm进行了简单的优化后就没出问题了,
    其实Xms 和xmx可设置一样大小。
      

  2.   

    我只要重启任何一端,重新连上后数据就正常了;---------------------后期的解决办法----------增加tomcat jvm JAVA_OPTS="-server -Xms1024m -Xmx4096m -XX:PermSize=128M  -XX:MaxPermSize=512m "
    数据清理放在晚上三点进行同一删除
    -------------------------------------------------------------------------------------------------------------------------------------------------------------10-27--------------------------------------
    socket.setReceiveBufferSize(32*1024);
    增加缓冲器区大小试试看看效果
    ----------------------------------------------------------------------------现在看起来是正常了,再也没出现问题,包括之前偶尔会出现的数据库连接失效的问题,我觉得是对jvm进行了简单的优化后就没出问题了,
    其实Xms 和xmx可设置一样大小。

    只是优化虚拟机就不出错了,那么猜测是某段代码的健康性不是很好,或者数据库的链接池没有适当,造成内存占用过大,服务撑不住,自己挂掉了。
    所有任何一方断开链接,反而好了…………
      

  3.   

    是不是对方发的太快了,这样可能会有两条数据粘连起来,然后你接收数据的时候如果做了哪些格式校验的话,可能就出错了,导致两条数据不会存起来,我是有过这种问题,加了个sleep(10)的延迟就好了