socket收数据时随时间逐渐丢失数据

小牛毛 2018-10-28 10:54:59
1.简单说下数据原理:

服务端是c写的socketServer,估算下现在每秒大概发300~400条数据(最近出问题),以前每秒大概100条时很正常;
客户端是我的java端写的,接收数据后直接扔到消息队列中;

我这就是:
while(true)
{
readLine();
然后扔队列;
}


2.问题:
1.最近socket 时不时被服务端断开,我估计那边有问题,但他们还没找出问题;
2.随着时间推移,客户端收到的数据越来越少。。。。,很多数据都丢失了,但是重启后进行重新连接,数据又正常了,但是不知道过多久后又会少数据,我这边socket的接收缓冲区已经加大了,默认8*1024,已经改成32*1024,还是会出现问题;
3.这样看来,socket连接是连着的,不然啥数据也收不到,就是少了大部分数据,我现在这边已经各种处理了,很怀疑是服务端的问题。。。




...全文
369 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
RUA好多鱼~ 2018-12-03
  • 打赏
  • 举报
回复
是不是对方发的太快了,这样可能会有两条数据粘连起来,然后你接收数据的时候如果做了哪些格式校验的话,可能就出错了,导致两条数据不会存起来,我是有过这种问题,加了个sleep(10)的延迟就好了
咸哼酒家 2018-11-19
  • 打赏
  • 举报
回复
引用 4 楼 yinqianhui1990 的回复:
[quote=引用 3 楼 CEOCAO 的回复:]
1:当客户端断开的时候,服务端若是正常,很有可能就是客户端的问题,
反之 锅就是服务端的;

2:数据能接受但是不全面,重启后正常,重启指的是服务端?
如果是,服务端没有真的将数据发送出去,就是它的锅了。



我只要重启任何一端,重新连上后数据就正常了;

---------------------后期的解决办法----------

增加tomcat jvm

JAVA_OPTS="-server -Xms1024m -Xmx4096m -XX:PermSize=128M -XX:MaxPermSize=512m "


数据清理放在晚上三点进行同一删除
---------------------------------------------------------------------------------------------------------------------------

----------------------------------10-27--------------------------------------
socket.setReceiveBufferSize(32*1024);
增加缓冲器区大小试试看看效果
----------------------------------------------------------------------------

现在看起来是正常了,再也没出现问题,包括之前偶尔会出现的数据库连接失效的问题,我觉得是对jvm进行了简单的优化后就没出问题了,
其实Xms 和xmx可设置一样大小。
[/quote]
只是优化虚拟机就不出错了,那么猜测是某段代码的健康性不是很好,或者数据库的链接池没有适当,造成内存占用过大,服务撑不住,自己挂掉了。
所有任何一方断开链接,反而好了…………
小牛毛 2018-11-19
  • 打赏
  • 举报
回复
引用 3 楼 CEOCAO 的回复:
1:当客户端断开的时候,服务端若是正常,很有可能就是客户端的问题,
反之 锅就是服务端的;

2:数据能接受但是不全面,重启后正常,重启指的是服务端?
如果是,服务端没有真的将数据发送出去,就是它的锅了。



我只要重启任何一端,重新连上后数据就正常了;

---------------------后期的解决办法----------

增加tomcat jvm

JAVA_OPTS="-server -Xms1024m -Xmx4096m -XX:PermSize=128M -XX:MaxPermSize=512m "


数据清理放在晚上三点进行同一删除
---------------------------------------------------------------------------------------------------------------------------

----------------------------------10-27--------------------------------------
socket.setReceiveBufferSize(32*1024);
增加缓冲器区大小试试看看效果
----------------------------------------------------------------------------

现在看起来是正常了,再也没出现问题,包括之前偶尔会出现的数据库连接失效的问题,我觉得是对jvm进行了简单的优化后就没出问题了,
其实Xms 和xmx可设置一样大小。
咸哼酒家 2018-10-29
  • 打赏
  • 举报
回复
1:当客户端断开的时候,服务端若是正常,很有可能就是客户端的问题,
反之 锅就是服务端的;

2:数据能接受但是不全面,重启后正常,重启指的是服务端?
如果是,服务端没有真的将数据发送出去,就是它的锅了。
小牛毛 2018-10-28
  • 打赏
  • 举报
回复
自己来顶顶!

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧