多线程老是会长眠不醒??

meteorlg 2007-02-01 10:40:40
我写了一个多线程的程序,开了30个线程,每个线程会到网络上下载一些网页然后做些处理然后保存成xml文件,有一个主线程控制它们,分配任务给它们。

在我的机器上运行没有问题,可是换到另一台服务器上运行个一天就会发现它停在那里不动了,我打印出一些信息发现有2,3个线程还在运行状态,但是它们就一直不动了,因为我每一步处理都会输出东西出来,而此时屏幕上不会再有任何工作线程打印的东西出来,只有主线程在定期的判断它们是否结束,它们为什么停止不动了呢?

我也设了connect的timeout和read的timeout,不知道它们为什么会停止不动?各位老大帮我分析分析应该怎么解决这个问题啊?提一下思路也可以啊,多谢啊
...全文
286 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
meteorlg 2007-02-03
  • 打赏
  • 举报
回复
我设了timeout,如果连接失败就跳过这个url
现在我把所有打出的信息都去掉了,然后发现就是java heap size 溢出的问题,我已经设了512M的heap size,还是不够,我的内存是1G的
请问如何才能避免内存溢出啊
我总共的数据才不到300M,应该是有内存泄露的问题吧
请问,如何检测和解决内存泄露呢?
wmzsl 2007-02-01
  • 打赏
  • 举报
回复
估计是死锁了! 看看有没有锁
meteorlg 2007-02-01
  • 打赏
  • 举报
回复
可是并不是cpu的问题啊,cpu是空闲的
json_001 2007-02-01
  • 打赏
  • 举报
回复
是否应该在线程上加一个优先级判断标志,每次获得cpu的线程-1, 其它的线程+1。呵呵。
meteorlg 2007-02-01
  • 打赏
  • 举报
回复
谢谢你的回复
cpu是空闲的,而且在那个时候我的程序基本没有占用cpu
我的线程是当主线程分配给它一个初始url的时候开始进入工作状态,然后它不需要其它资源即可以工作了,它会调用一个单例的对象,向其中的文档缓冲区增加分析好的文档,当这个缓冲区满的时候这个单例对象会向磁盘写文件并清空缓冲区。每个线程也会调用一个单例的对象执行写日志操作。每个线程也会向一个任务队列的单例对象增加新发现的任务。线程执行结束会回到空闲状态,等待主线程分配任务,只有主线程会从任务队列取下一个任务分配给空闲的线程。

请问我的设计有没有什么问题呢?哪里会引发线程无限等待?谢谢
yzh963 2007-02-01
  • 打赏
  • 举报
回复
应该是等待线程,得不到资源或cpu时间,检查一下,你线程请求的资源是不是正在被其它线程或程序使用没有释放呀
yunxiang 2007-02-01
  • 打赏
  • 举报
回复
是不是可能是网络问题呢?
如果程序在进行中。其中一个网络有问题。断线了。你的程序有自动重新连接的么?
meteorlg 2007-02-01
  • 打赏
  • 举报
回复
初步觉得是有内存泄露导致内存溢出
我用了一些vector,list,hashtable等等,应该如何避免内存泄露呢?
比如我用vector做缓冲区,当我要清空缓冲区的时候应该用vector.clear()还是
vector=new Vector()?

81,122

社区成员

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

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