免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。
问题描述
在使用CentOS公共镜像或者自定义镜像创建的实例,如果同时满足下列两个条件,可能会发生宕机或者异常重启的问题。
- CentOS 7系统并且内核版本为3.10.0-514的实例,当其所在的VPC网段中实例过多时,可能会触发Linux内核问题。
注: 运行命令
uname -a
查看CentOS系统内核版本。 - 实例所在的VPC同一网段内实例数量超过128。
- VPC同一网段内实例数量越多发生该问题的几率也会越高。
- 从经典网络迁移至专有网络的用户需要特别注意该问题。
问题原因
- 当VPC同一网段内的实例数量超过内核参数net.ipv4.neigh.default.gc_thresh1(默认值为128)的值,并且实例互相之间有通过网络相互访问的行为时,内核ARP(Address Resolution Protocol,地址解析协议)缓存表项也将超过net.ipv4.neigh.default.gc_thresh1设定的值。
- 此时,内核会触发对于ARP表项的回收机制,而CentOS系统的内核版本为3.10.0-514,在ARP回收过程中和处理其他ARP表项的内核函数之间存在竞争,可能会导致内核崩溃。已知的内核崩溃现象包括实例异常重启和实例内部宕机,以下为内核崩溃导致的常见内核堆栈信息。
PID: 35 TASK: ffff88023fe13ec0 CPU: 0 COMMAND: "kworker/0:1" [exception RIP: __write_lock_failed+9] RIP: ffffffff813275c9 RSP: ffff88023f7e3dc8 RFLAGS: 00000297 RAX: ffff88019c338000 RBX: ffff880035c89800 RCX: 000000000000000a RDX: 0000000000000372 RSI: 000000012eeea6c0 RDI: ffff880035c8982c RBP: ffff88023f7e3dc8 R8: ffffffff81aa7858 R9: 0001f955a06a7850 R10: 0001f955a06a7850 R11: 0000000000000000 R12: 0000000000000372 R13: ffffffff81aa7850 R14: ffff880035c89828 R15: ffff88019c339b90 CS: 0010 SS: 0018 #0 [ffff88023f7e3dd0] _raw_write_lock at ffffffff8168e7d7 #1 [ffff88023f7e3de0] neigh_periodic_work at ffffffff8157f3ac #2 [ffff88023f7e3e20] process_one_work at ffffffff810a845b #3 [ffff88023f7e3e68] worker_thread at ffffffff810a9296 #4 [ffff88023f7e3ec8] kthread at ffffffff810b0a4f #5 [ffff88023f7e3f50] ret_from_fork at ffffffff81697758 PID: 0 TASK: ffff880173afce70 CPU: 20 COMMAND: "swapper/20" [exception RIP: native_halt+5] RIP: ffffffff81060ff5 RSP: ffff880173b1b878 RFLAGS: 00000046 RAX: 000000000000912c RBX: ffff881fbf30f380 RCX: 000000000000912e RDX: 000000000000912c RSI: 000000000000912e RDI: ffff8801736a0000 RBP: ffff880173b1b878 R8: 0000000000000086 R9: 0000000000000000 R10: 0000000000000000 R11: ffff880173b1b95e R12: 0000000000000082 R13: 0000000000000014 R14: 0000000000000000 R15: 0000000000000e20 CS: 0010 SS: 0018 #0 [ffff880173b1b880] kvm_lock_spinning at ffffffff81060b5a #1 [ffff880173b1b8b0] __raw_callee_save_kvm_lock_spinning at ffffffff8105ff05 #2 [ffff880173b1b900] _raw_spin_lock_irqsave at ffffffff8168dcd3 #3 [ffff880173b1b940] mod_timer at ffffffff81098e24 #4 [ffff880173b1b988] add_timer at ffffffff81098fe8 #5 [ffff880173b1b998] fbcon_add_cursor_timer at ffffffff81381069 #6 [ffff880173b1b9c0] fbcon_cursor at ffffffff8138422a #7 [ffff880173b1ba10] hide_cursor at ffffffff813f6628 #8 [ffff880173b1ba28] vt_console_print at ffffffff813f8058 #9 [ffff880173b1ba90] call_console_drivers.constprop.15 at ffffffff81086ca1 #10 [ffff880173b1bab8] console_unlock at ffffffff810884be #11 [ffff880173b1baf0] vprintk_emit at ffffffff810889d4 #12 [ffff880173b1bb60] vprintk_default at ffffffff81088d49 #13 [ffff880173b1bb70] printk at ffffffff8167f854 #14 [ffff880173b1bbd0] no_context at ffffffff8167ecbb #15 [ffff880173b1bc20] __bad_area_nosemaphore at ffffffff8167ee29 #16 [ffff880173b1bc68] bad_area_nosemaphore at ffffffff8167ef93 #17 [ffff880173b1bc78] __do_page_fault at ffffffff81691f1e #18 [ffff880173b1bcd8] trace_do_page_fault at ffffffff81692176 #19 [ffff880173b1bd18] do_async_page_fault at ffffffff8169181b #20 [ffff880173b1bd30] async_page_fault at ffffffff8168e3b8 [exception RIP: get_next_timer_interrupt+440] RIP: ffffffff810991a8 RSP: ffff880173b1bde0 RFLAGS: 00010017 RAX: 0000000000000000 RBX: 0098950e05e51640 RCX: 0000ffbc0000ffbc RDX: 0000000b3fe32cf2 RSI: ffff8801736a1318 RDI: 000000000affe32d RBP: ffff880173b1be30 R8: 0000000000000001 R9: 000000000000002f R10: 000000000000002d R11: ffff8801736a1028 R12: 0000000affe32cf2 R13: ffff8801736a0000 R14: ffff880173b1bde8 R15: ffff880173b1be00 ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 #21 [ffff880173b1be38] tick_nohz_stop_sched_tick at ffffffff810f3418 #22 [ffff880173b1be90] __tick_nohz_idle_enter at ffffffff810f35be #23 [ffff880173b1bec0] tick_nohz_idle_enter at ffffffff810f3aed #24 [ffff880173b1bed0] cpu_startup_entry at ffffffff810e7c13 #25 [ffff880173b1bf28] start_secondary at ffffffff8104f11a
解决方案
阿里云提醒您:
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
请根据现场实际情况,选择以下对应的步骤。
升级系统内核版本
登录实例,执行如下命令,将系统内核升级至3.10.0-693.21.1.el7.x86_64及以上版本。
yum update kernel
注:升级内核版本后,需重启实例。
修改配置参数
如果您不方便升级系统内核,也可以采用如下两种方法解决该问题。
方法一
通过执行以下命令,调整内核参数的值,使gc_thresh1的值大于VPC同一网段内实例数量,并确保gc_thresh3的值大于gc_thresh2的值,gc_thresh2的值大于gc_thresh1的值。例如,您可以将三个内核参数的值设置如下。
sysctl -w net.ipv4.neigh.default.gc_thresh1=4096 sysctl -w net.ipv4.neigh.default.gc_thresh2=8192 sysctl -w net.ipv4.neigh.default.gc_thresh3=8192
注: 请在/etc/sysctl.conf
文件中添加上述三个内核参数的配置信息。否则实例重启后,该设置将会失效。
方法二
规划网段时,建议您控制VPC同一网段内实例数量,避免出现同一网段内实例数量过多的情况。
适用于
- 云服务器 ECS
如果您的问题仍未解决,您可以在阿里云社区提交工单联系阿里云技术支持。