服务器、存储、网络产品购买热线:400-860-6708 ERP、管理软件购买热线:400-018-7700云服务产品销售热线:400-607-6657
clear
您当前所在位置: 首页 > 支持下载 > 技术帮助 > 常见问题 > 服务器

linux系统运行中产生D进程

发布时间: 2019年12月17日

问题描述

https://access.redhat.com/solutions/31453

https://access.redhat.com/zh_CN/solutions/695633

系统变为无响应状态并产生以下信息 "INFO: task <process>:<pid> blocked for more than 120 seconds".

Solution 已验证 - 已更新 2018年三月20日07:56 - 
中文 (中国)

环境

²  Red Hat Enterprise Linux (RHEL) 5.5 (kernel-2.6.18-194) 或更高版本

²  Red Hat Enterprise Linux (RHEL) 6

²  Red Hat Enterprise Linux (RHEL) 7

²  进程处于无法中断的睡眠状态 (D state)

问题

²  在系统变为无响应前,/var/log/messages 中记录了以下信息:

Raw

INFO: task <process>:<pid> blocked for more than 120 seconds

²  是什么原因导致产生上面的信息?在对这个问题进行故障排除时需要什么信息?

决议

  • 这些信息通常意味着,系统存在磁盘或内存阻塞问题,进程无法获得可用的资源。
  • 请参阅 "How do I use hung task check?" 中 CAUTIONS 一段的内容。
  • 这些信息通常用来提示用户注意与操作优化有关的问题。这些信息并不一定代表出现了严重的问题,而被阻塞的进程通常会在系统恢复正常状态时被处理。
  • 如果需要进一步的故障诊断,根据 How do I use hung task check in RHEL ? 的内容产生一个 vmcore,并和红帽的技术支持一起合作分析 vmcore。
  • 如果处于挂起状态的任务是第三方的应用程序,请同时请求相关应用程序厂商的支持。
  • 如果您已了解到这些任务挂起信息是因为特定错误造成的,您也可以禁止产生这些信息。但是,我们并不建议这样做,这也不可能防止任务挂起问题的出现。如果您需要禁止产生这些信息,请进行以下操作:
# sysctl kernel.hung_task_timeout_secs=0
  • 如果任务挂起导致系统崩溃,而且您已知道了造成这个问题的原因,则可以通过把以下内容添加到 /etc/sysctl.conf 中来避免系统崩溃。在进行改变后,需要运行 'sysctl -p' 以使改变生效。

Raw

kernel.hung_task_panic = 0

根源

  • Red Hat Enterprise Linux 5.5 使用的内核版本 2.6.18-194 中增加了一个 Detect Hung Task 内核线程 (khungtaskd),它的功能是检测到那些已处于 D-state ( Uninterruptible Sleep (UN) ) 状态超过了一定时间(默认是 120 秒)的任务,并把以下类型的信息记录到系统日志文件中(例如,/var/log/messages)。

Raw

"INFO: task <process>:<pid> blocked for more than 120 seconds"
  • khungtaskd 内核线程会监控进程的状态,并检查是否有进程已处于不可中断的状态超过了 "kernel.hung_task_timeout_secs" sysctl 参数所设定的时间长度(这个系统参数的默认值是 120 秒)。如果存在这样的进程,它会在日志中记录这个情况,并记录下阻塞进程的调用回溯信息。为了防止产生大量的日志数据,在默认情况下,这个监控进程只会报告检测到的最先发生的 10 个挂起任务,以后将不再报告。因此,即使不再产生相关的信息,仍然有可能存在阻塞的任务。
  • 检查与以下类似的信息:

诊断步骤

Raw

INFO: task syslogd:2643 blocked for more than 120 seconds.  
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.  
syslogd D ffff81000237eaa0 0 2643 1 2646 2634  

(NOTLB)  

ffff8101352c3d88 0000000000000086 ffff8101352c3d98 ffffffff80063ff8  
0000000000001000 0000000000000009 ffff81013d2c57e0 ffff810102ac1820  
0000340b30708992 0000000000000571 ffff81013d2c59c8 000000010000089f  
Call Trace:  
[<ffffffff80063ff8>] thread_return+0x62/0xfe  
[<ffffffff88036d8a>] :jbd:log_wait_commit+0xa3/0xf5  
[<ffffffff800a1ba4>] autoremove_wake_function+0x0/0x2e  
[<ffffffff8803178a>] :jbd:journal_stop+0x1cf/0x1ff  
[<ffffffff8002ff40>] __writeback_single_inode+0x1e9/0x328  
[<ffffffff800e1464>] do_readv_writev+0x26e/0x291  
[<ffffffff800f3d9d>] sync_inode+0x24/0x33  
[<ffffffff8804c36d>] :ext3:ext3_sync_file+0xc9/0xdc  
[<ffffffff8005073a>] do_fsync+0x52/0xa4  
[<ffffffff800e1ce9>] __do_fsync+0x23/0x36  
[<ffffffff8005e28d>] tracesys+0xd5/0xe0
  • 在发生问题时获取以下数据:

Raw

# uname -a > /tmp/uname.out
# ifconfig > /tmp/ifcongfig.out
# top -n 5 -b > /tmp/top.out
# vmstat 1 50 > /tmp/vm.out
# iostat -x 2 10 > /tmp/io.out
# ps aux > /tmp/ps.out
# ps auxH > /tmp/psh.out
# sar -A > /tmp/sar.out
# free > /tmp/free.out
# lsof > /tmp/lsof.out

运行以下命令以提供相关的数据:
Raw

# tar -cjvf outputs.tar.bz2 /tmp/*.out
# tar -cjvf message.tar.bz2 /var/log/message*
  • 检查这个问题是否是因为使用远程文件系统(如 NFS)造成处理延迟。例如,如果有大量 NFS 服务器请求,就可能会造成这个问题。


Raw

$ grep MYAPP lsof | grep oracle
MYAPP    7096     1062  cwd    DIR    0,18     0     558301 /oracle/prd/fs_ne/inst/conc/log
...
$ grep nfs mount
remotehost@:/ on /oracle/prd/fs_ne/inst type nfs (rw,nosuid)

关于浪潮

集团简介 企业文化 董事长致辞 加入我们 联系我们 关注我们

新闻与活动

新闻公告 市场活动 科技战“疫”

如何购买

需求工单 售前咨询 查找经销商

探索浪潮

通用服务器 存储 人工智能 爱城市网 浪潮云 浪潮云ERP

支持与服务

支持下载 视频中心 服务进度查询 安全通告

快速链接

合作伙伴生态 电子采购平台 投行项目 投资者关系 道德遵从

在社交媒体上关注我们

拨打咨询电话