我为Nagios / Icinga制作了一个插件,用于解析网络设备日志中的字符串,但它在大型环境中导致内核恐慌。完整代码可以找到here。我已经尝试重新安装内核和一些软件包,但它仍然存在。它也在另一台服务器上正常运行,但该服务器监视的主机较少。如何解决Oops以修复代码或修复服务器?
该脚本使用Net :: OpenSSH连接到不同的网络设备并运行“sh log”,示例摘录如下:
my $cisco_cmd = 'sh log ';
# SSH
if ($socket) {
SSH();
# Cisco SSH command
my $ssh_session = $ssh->system({stdout_fh=> $stdout_fh}, $cisco_cmd);
}
sub SSH{
$ssh = Net::OpenSSH->new($host, user=>$username,
password=>$password,
timeout => 30,
master_stdout_fh => $stdout_fh,
master_stderr_fh => $stdout_fh,
master_opts => [-o => "KexAlgorithms=+diffie-hellman-group1-sha1",
-o => "HostKeyAlgorithms=+ssh-dss",
-o => "StrictHostKeyChecking no"]);
if ($ssh->error) {
print "Unknown - Unable to connect to remote host: ". $ssh->error . "\n";
exit 3;
};
return $ssh;
}
随着时间的推移,syslog将在进入内核恐慌之前开始记录Oops。
哎呀是:
Oct 6 14:11:43 icinga1 kernel: [359392.196625] BUG: unable to handle kernel NULL pointer dereference at (null)
Oct 6 14:11:43 icinga1 kernel: [359392.196632] IP: [<ffffffff814fa7c5>] tty_ioctl+0x375/0xc40
Oct 6 14:11:43 icinga1 kernel: [359392.196640] PGD 0
Oct 6 14:11:43 icinga1 kernel: [359392.196642] Oops: 0000 [#1] SMP
Oct 6 14:11:43 icinga1 kernel: [359392.196645] Modules linked in: vmw_vsock_vmci_transport vsock coretemp crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd vmw_balloon input_leds joydev serio_raw shpchp i2c_piix4 vmw_vmci 8250_fintek mac_hid sunrpc parport_pc ppdev lp parport autofs4 vmw_pvscsi vmwgfx ttm drm_kms_helper syscopyarea psmouse sysfillrect sysimgblt mptspi fb_sys_fops mptscsih drm mptbase ahci vmxnet3 libahci scsi_transport_spi pata_acpi floppy fjes
Oct 6 14:11:43 icinga1 kernel: [359392.196672] CPU: 1 PID: 21451 Comm: ssh Not tainted 4.4.0-96-generic #119-Ubuntu
Oct 6 14:11:43 icinga1 kernel: [359392.196684] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 09/21/2015
Oct 6 14:11:43 icinga1 kernel: [359392.196686] task: ffff88042d008000 ti: ffff88033194c000 task.ti: ffff88033194c000
Oct 6 14:11:43 icinga1 kernel: [359392.196688] RIP: 0010:[<ffffffff814fa7c5>] [<ffffffff814fa7c5>] tty_ioctl+0x375/0xc40
Oct 6 14:11:43 icinga1 kernel: [359392.196691] RSP: 0018:ffff88033194fdf0 EFLAGS: 00010246
Oct 6 14:11:43 icinga1 kernel: [359392.196692] RAX: 0000000000000000 RBX: ffff8803c8aec800 RCX: fffffffeffffffff
Oct 6 14:11:43 icinga1 kernel: [359392.196693] RDX: fffffffe00000001 RSI: 0000000000000000 RDI: ffff8803c8aec828
Oct 6 14:11:43 icinga1 kernel: [359392.196694] RBP: ffff88033194fe98 R08: 0000563d7cc698e0 R09: 0000563d7c0cc880
Oct 6 14:11:43 icinga1 kernel: [359392.196695] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000005401
Oct 6 14:11:43 icinga1 kernel: [359392.196697] R13: 00007ffef42a03b0 R14: ffff8803d1d9c500 R15: 0000000000000000
Oct 6 14:11:43 icinga1 kernel: [359392.196699] FS: 00002b64e6d8f000(0000) GS:ffff88043fc40000(0000) knlGS:0000000000000000
Oct 6 14:11:43 icinga1 kernel: [359392.196700] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Oct 6 14:11:43 icinga1 kernel: [359392.196701] CR2: 0000000000000000 CR3: 00000000bac36000 CR4: 00000000000406e0
Oct 6 14:11:43 icinga1 kernel: [359392.196784] Stack:
Oct 6 14:11:43 icinga1 kernel: [359392.196786] ffff8802bf401600 ffff88033194fe20 ffffffff812276f2 ffff8802bf401600
Oct 6 14:11:43 icinga1 kernel: [359392.196788] ffff8802bf401658 ffff8802bf401600 ffff88033194fe58 ffffffff8122795e
Oct 6 14:11:43 icinga1 kernel: [359392.196790] ffff880428845000 0000000000000008 ffff8802cc420cb0 ffff88042d5d2920
Oct 6 14:11:43 icinga1 kernel: [359392.196792] Call Trace:
Oct 6 14:11:43 icinga1 kernel: [359392.196800] [<ffffffff812276f2>] ? __dentry_kill+0x162/0x1e0
Oct 6 14:11:43 icinga1 kernel: [359392.196802] [<ffffffff8122795e>] ? dput+0x1ee/0x220
Oct 6 14:11:43 icinga1 kernel: [359392.196818] [<ffffffff81231224>] ? mntput+0x24/0x40
Oct 6 14:11:43 icinga1 kernel: [359392.196822] [<ffffffff81211f00>] ? __fput+0x190/0x220
Oct 6 14:11:43 icinga1 kernel: [359392.196824] [<ffffffff81223faf>] do_vfs_ioctl+0x29f/0x490
Oct 6 14:11:43 icinga1 kernel: [359392.196826] [<ffffffff81211fce>] ? ____fput+0xe/0x10
Oct 6 14:11:43 icinga1 kernel: [359392.196830] [<ffffffff8109f116>] ? task_work_run+0x86/0xa0
Oct 6 14:11:43 icinga1 kernel: [359392.196832] [<ffffffff81224219>] SyS_ioctl+0x79/0x90
Oct 6 14:11:43 icinga1 kernel: [359392.196836] [<ffffffff81843272>] entry_SYSCALL_64_fastpath+0x16/0x71
Oct 6 14:11:43 icinga1 kernel: [359392.196838] Code: 18 48 8b 41 60 48 85 c0 74 16 4c 89 ea 44 89 e6 48 89 df ff d0 3d fd fd ff ff 0f 85 da fd ff ff 48 89 df e8 3e 74 00 00 49 89 c7 <48> 8b 00 4c 8b 40 48 48 c7 c0 ea ff ff ff 4d 85 c0 74 22 44 89
Oct 6 14:11:43 icinga1 kernel: [359392.196859] RIP [<ffffffff814fa7c5>] tty_ioctl+0x375/0xc40
Oct 6 14:11:43 icinga1 kernel: [359392.196861] RSP <ffff88033194fdf0>
Oct 6 14:11:43 icinga1 kernel: [359392.196862] CR2: 0000000000000000
Oct 6 14:11:43 icinga1 kernel: [359392.196865] ---[ end trace 72b7f0a8e26ab854 ]---
答案 0 :(得分:1)
日志中的错误报告说明问题出在tty_ioctl
上,因此在tty文件描述符上调用ioctl
时会触发它。 Net::OpenSSH
在进行密码身份验证时使用伪tty,因此,您的问题的可能解决方法是切换到不需要tty的其他身份验证机制,例如公钥身份验证。
此外,回溯显示在操作文件系统时发生了崩溃,因此您的真正问题可能是文件系统损坏,从而触发了一些内核错误。您可以尝试在机器文件系统上强制fsck
或仅重新创建它们。
您没有说明您使用的是哪个Linux发行版的内核版本。您可以尝试切换到另一个。
无论如何,这是第一次有人报告这个问题,Net :: OpenSSH经常用于密码验证,因此,除非你使用的是非常罕见的内核版本,否则应该在你的系统中有一些特殊的东西会导致出现这个bug。