内核挂着tty子系统

时间:2014-10-29 10:42:35

标签: linux linux-kernel trace

我在RHEL机器上遇到tty子系统的一些问题。从我在日志中看到的,每次生成一个新的控制台(无论是pts还是tty)时,都会生成一些内核oopses。在我看来,那里出现了某种竞争条件。这是堆栈跟踪:

kernel:  INFO: task sshd:6338 blocked for more than 120 seconds.
kernel:       Tainted: P           ---------------    2.6.32-504.el6.x86_64 #1
kernel:  "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
kernel:  sshd          D 0000000000000000     0  6338   6195 0x00000080
kernel:  ffff88035be8d728 0000000000000082 0000000000000000 0000000000000000
kernel:  ffff88035be8d7f8 ffffffff8105ca34 00009488ef033e83 ffff88035be8d708
kernel:  ffff88035be8d880 0000000109b91c98 ffff881eea341098 ffff88035be8dfd8
kernel:  Call Trace:
kernel:  [<ffffffff8105ca34>] ? find_busiest_group+0x244/0x9e0
kernel:  [<ffffffff8152a8c5>] schedule_timeout+0x215/0x2e0
kernel:  [<ffffffff8152a543>] wait_for_common+0x123/0x180
kernel:  [<ffffffff81064b90>] ? default_wake_function+0x0/0x20
kernel:  [<ffffffff8152a65d>] wait_for_completion+0x1d/0x20
kernel:  [<ffffffff81098bf7>] flush_work+0x77/0xc0
kernel:  [<ffffffff81098460>] ? wq_barrier_func+0x0/0x20
kernel:  [<ffffffff81098e14>] flush_delayed_work+0x54/0x70
kernel:  [<ffffffff813392f5>] tty_flush_to_ldisc+0x15/0x20
kernel:  [<ffffffff81333cc7>] n_tty_poll+0x67/0x1d0
kernel:  [<ffffffff8132f80a>] tty_poll+0x8a/0xa0
kernel:  [<ffffffff811a6895>] do_select+0x3c5/0x7c0
kernel:  [<ffffffff8149cf18>] ? ip_finish_output+0x148/0x310
kernel:  [<ffffffff811a59f0>] ? __pollwait+0x0/0xf0
kernel:  [<ffffffff811a5ae0>] ? pollwake+0x0/0x60
kernel:  [<ffffffff811a5ae0>] ? pollwake+0x0/0x60
kernel:  [<ffffffff811a5ae0>] ? pollwake+0x0/0x60
kernel:  [<ffffffff811a5ae0>] ? pollwake+0x0/0x60
kernel:  [<ffffffff8152d04b>] ? _spin_unlock_bh+0x1b/0x20
kernel:  [<ffffffff8144b835>] ? release_sock+0xe5/0x110
kernel:  [<ffffffff814a52cc>] ? tcp_sendmsg+0x73c/0xa20
kernel:  [<ffffffff8144a72b>] ? sock_aio_write+0x19b/0x1c0
kernel:  [<ffffffff8133158d>] ? tty_wakeup+0x3d/0x80
kernel:  [<ffffffff811a6e1a>] core_sys_select+0x18a/0x2c0
kernel:  [<ffffffff8109eb00>] ? autoremove_wake_function+0x0/0x40
kernel:  [<ffffffff811a71a7>] sys_select+0x47/0x110
kernel:  [<ffffffff810e5c87>] ? audit_syscall_entry+0x1d7/0x200
kernel:  [<ffffffff810e5a7e>] ? __audit_syscall_exit+0x25e/0x290
kernel:  [<ffffffff8100b072>] system_call_fastpath+0x16/0x1b

因此,查看最后2个函数调用,似乎任务计划通过schedule_timeout()调用一段时间,之后find_busiest_group尝试平衡该任务生成的负载。它是正确的还是我在这里缺少的东西?

感谢。

2 个答案:

答案 0 :(得分:1)

如果有人有兴趣,我向RedHat开了一个案例,似乎问题是关于阵列控制器(hpsa)中的HP固件错误。更多详情:https://access.redhat.com/solutions/1179703

**指我已经查看了bugzilla并发现该bug可能与

有关
  

Smart Array固件版本。

     

使用以下控制器组合在系统上重现该错误   版本和hpsa模块版本。 (新的hpsa模块版本和旧版本   固件版本)

     
      
  • kmod-hpsa:3.4.4-1-RH1
  •   
  • SA固件:3.22
  •   
  • 控制器:P220i(103c:323b 103c:3355 rev 01)
  •   
     

系统运行新的hpsa模块版本和新的固件版本   没有复制这个错误。

     
      
  • kmod-hpsa:3.4.4-1-RH1
  •   
  • SA固件:3.42
  •   
  • 控制器:P220i(103c:323b 103c:3355 rev 01)
  •   
     

系统运行旧的hpsa模块版本和旧固件版本   也没有复制这个bug。

     
      
  • kmod-hpsa:3.4.0-1-RH1
  •   
  • SA固件:3.22
  •   
  • 控制器:P220i(103c:323b 103c:3355 rev 01)
  •   
     

在我们的例子中,控制器固件版本是3.22,我们正在使用   新的hpsa模块版本3.4.4-1-RH2。

     

$ cat proc / scsi / scsi | grep -A 5 P220i供应商:惠普产品型号:   P220i Rev:3.22类型:RAID
  ANSI SCSI修订版:05

     

现在我看到使用旧内核我们正在使用旧版本的hpsa模块   (3.4.0-1-RH1)。有了这个,系统不应该遇到这个错误。

     

modinfo hpsa filename:/lib/modules/2.6.32-431.23.3.el6.x86_64/kernel/drivers/scsi/hpsa.ko

     许可证:GPL版本:3.4.0-1-RH1描述:驱动程序   对于HP Smart Array Controller版本3.4.0-1-RH1作者:
  惠普公司**

这是RedHat工程师的陈述。

答案 1 :(得分:0)

从堆栈跟踪看起来像&#34; sshd&#34;进程处于D状态并被阻止超过120秒,因此消息显示在syslog中。可能是进程在被阻塞时正在等待I / O或其他一些资源。

虽然您运行的是RHEL6,但内核版本(2.6.32-504.el6.x86_64)已经很老了。我建议先使用yum upgrade更新内核。如果您在更新内核后遇到相同的问题,我建议配置kdump并在问题可重现时获取vmcore。然后,如果您对linux内部结构感到满意,请使用崩溃工具进一步分析核心,或联系OS供应商寻求支持。