免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1708 | 回复: 6
打印 上一主题 下一主题

问个进程状态的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-11 14:13 |只看该作者 |倒序浏览
我写了个服务器程序,用一个多线程客户端疯狂的测试压力。
当处理了140多万次的时候,服务器进程没反应了。进程还在,就是既不接收也不处理业务了。
用top查看进程状态,S一栏显示"S+"。使用kill命令不加参数无法终止进程,必须要用kill -9才行。
从代码看不出什么问题,请问有经验的谁能告诉我可能是什么问题,如何查找问题所在。谢谢。

论坛徽章:
0
2 [报告]
发表于 2009-10-11 21:59 |只看该作者
重点看一下SIGKILL和SIGTERM的区别。。。。
http://en.wikipedia.org/wiki/Kill_%28command%29

论坛徽章:
0
3 [报告]
发表于 2009-10-12 09:26 |只看该作者
文件句柄泄漏?

论坛徽章:
0
4 [报告]
发表于 2009-10-12 10:26 |只看该作者
应该不是文件句柄问题

论坛徽章:
0
5 [报告]
发表于 2009-10-12 13:25 |只看该作者
不是句柄问题。
现在怀疑跟SIGALRM信号和写日志有关。每次出现问题的时候都是整点时刻,要么是12:00, 要么是18:00。
我把服务器写日志的部分屏蔽掉就不会出现问题了。
我服务器写日志是这样写的,用一个全局字符串保存日志文件名,日志文件名包含当前日期。
服务器程序启动时,计算当前时间距离下一点钟有多少秒,然后调用alarm(s)函数,使系统在s秒后发送SIGALRM信号给服务器程序。服务器接受到SIGALRM信号后,更新日志文件名变量,再执行alarm(m), 是系统在下一个整点时刻发送SIGALRM信号给服务器程序。循环。保证每个小时都检查一次时间,以便根据日期更新日志文件名。

论坛徽章:
0
6 [报告]
发表于 2009-10-12 15:04 |只看该作者
原因找到了。
SIGALRM是不可靠信号。会中断一些不允许中断的处理过程,比如malloc。之后就会出现问题。

论坛徽章:
0
7 [报告]
发表于 2009-10-12 16:00 |只看该作者
信号中断处理函数,禁止使用malloc这个是常识吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP