系统致命问题:关于多线程和系统资源的问题(紧急求救)

yunmengxiaofei 2003-06-03 03:25:29
我写了一个服务器程序,实现短信的上、下行(接受短信和发送短信),linux后台24小时运行
有三个主要线程,每个都有一个死循环
1:activeThread.java
此线程是用来向移动提供的端口发送一个包,此包用来保持我的服务器和移动端口之间的链接,如果移动端口再10秒之内没有收到我的包,就会断开和我的连接
2:MoThread.java
此线程是用来向移动提供的端口接受包,就是接受别的手机发给我的短信,死循环,每隔0.1秒扫描一次端口,将接受到的包插入数据库。
2:MainService.java
主线程,每隔0.1秒扫描我的数据库,将需要发送的数据发送出去。

问题:我的程序会随着时间,变得越来越慢,接受包的时间越来越长,刚开始是3秒,再就是10秒,再就是几分钟,然后就是1个多小时才接收到端口的包,但是我每次重启服务程序,就会变得很快,当然,接着又会变慢!!!

会不会是程序消耗系统资源太多,还是多线程之间的控制问题,如何释放,如何让这样的情况不再发生,我快崩溃了,大侠们,指点啊!!!!
...全文
29 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackwind 2003-06-14
  • 打赏
  • 举报
回复
your architecture design sucks.

Think the difference btw:

PUSH

v.s.

PULL
sharpen 2003-06-11
  • 打赏
  • 举报
回复
绝对是你的程序的问题,你还是好好看看吧。
还有你的时间间隔是不是太小了点啊?!
你们对实时性的要求有那么高么?
我看10秒左右就可以了
加以适当的线程调度应该不成问题
runer 2003-06-06
  • 打赏
  • 举报
回复
我觉得你这个设计有点问题(纯属主观臆断,不可全信)

1、第2个和第三个线程没有必要活动的那么频繁
目前的条件下,电信的短信网关极限收发速度也只是1500条/秒 左右吧

2、以你第2个线程为例,不清楚到底是这一个线程负责扫描端口,接受数据,保存数据、一气呵成,还是接收到数据后放到个队列中,由另外一个线程负责保存?

3、也就是这个接收数据和保存数据的过程是不是可以以非阻塞的方式进行?

4、尤其你最后一个线程,对数据库造成的负载可能非常大,(你用的什么数据库?数据量有多大?) 所以你要搞清到底是java程序造成的系统运行缓慢,还是因为数据库过载造成整体缓慢?
funpig 2003-06-06
  • 打赏
  • 举报
回复
照你说的肯定是你的程序有问题,还是自己看看程序吧
yunmengxiaofei 2003-06-05
  • 打赏
  • 举报
回复
没人帮我了吗
accp 2003-06-04
  • 打赏
  • 举报
回复
把你的死循环换成Timer,让它每隔一定时间激活你的线程,再者就是检查你的每一行代码,看哪些资源可以用缓存,哪些步骤是多余的,最好用JBuilder 单步执行,这样看的比较清楚,
总能找到一些可以优化的地方~
yunmengxiaofei 2003-06-04
  • 打赏
  • 举报
回复
如何释放垃圾?System.gc()和RunTime.gc()肯定不行
java的机制就是系统释放垃圾,强制释放怎么实现?
cshchina 2003-06-03
  • 打赏
  • 举报
回复
要那么多的连接干嘛?不能发送/接收udp?
思奔 2003-06-03
  • 打赏
  • 举报
回复
可不可以没间隔一段时间在代码里强行释放一下垃圾呢?

13,100

社区成员

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

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