首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程在FreeBSD 9.0下挂起不间断睡眠,显然没有syscall (空wchan)

进程在FreeBSD 9.0下挂起不间断睡眠,显然没有syscall (空wchan)
EN

Stack Overflow用户
提问于 2012-03-20 12:12:01
回答 1查看 1.2K关注 0票数 1

我有一个自定义的日志记录过程,它从STDIN读取数据并通过TCP发送到一个抄写日志服务器。在我的例子中,STDIN是一个连接到Apachehttpd2.2的访问日志,在httpd.conf中是这样的:默认情况下是: CustomLog“AC.26/usr/local/bin/serelog”

我的serelog过程有时会在FreeBSD 9.0下进入不间断的睡眠状态,而不会从中返回。不过,它在其他操作系统下工作可靠,包括FreeBSD 8、Linux2.6和Linux3.1。

我怎样才能找到不间断睡眠的原因呢?

总体结构如下: httpd --管道--> serelog --TCP--连接-->已编写的

直到现在,我做了以下分析:

使用ps: stat的

  • 是"D“,wchan是"-”。因此,显然没有syscall,这对我来说没有多大意义,因为这个过程处于不间断的睡眠状态,应该处于内核状态。当进程处于"D“状态时,这个过程不会对杀死做出反应- -9就像expected.
  • Attaching桁架从外壳到服务器端一样:只要附加了桁架,serelog就能顺利运行。从serelog中分离出桁架后不久,serelog进入"D“状态,
  • 在进入"D”状态后将桁架附加到serelog上时,在"D“状态下不打印
  • ,表示输入管道已满。这是被删除的,就像在"D“中,表示过程”休眠“,不能再读了。传出的TCP-连接是空的。如果我杀死了“周围”的Apache服务器,serelog进程最终会在(例如) 40 minutes.
  • Checking之后终止--其他人在论坛上报告的关于不可中断问题的报告没有成功:在我的设置中没有NFS。由于它是一台服务器,因此也没有与CD驱动器或可插拔硬件的用户交互。

因此,我现在被一个不可中断的进程困住了,它显然不在syscall中,并且在跟踪时工作可靠。唯一的好处是,当我通过JMeter负载测试(JMeter中的5个线程)发送大量HTTP请求时,我能够在几秒钟或几分钟内再现这种行为。

任何关于调试、内核参数调优的提示都会受到欢迎。

问候

EN

回答 1

Stack Overflow用户

发布于 2012-06-13 15:05:37

这个问题已经被证明是一个实际的FreeBSD内核错误,现在已经在内核中得到了修复。

链接到PR:http://www.freebsd.org/cgi/query-pr.cgi?pr=166340

拟议修补程序:http://lists.freebsd.org/pipermail/freebsd-bugs/2012-May/048610.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9786501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档