上周五凌晨两点,我们的监控突然炸了。核心汇聚交换机开始疯狂报错,端口一个接一个进入 err-disabled 状态。整个园区网直接瘫痪了半小时。
说实话,这种 IOS-XE 的诡异报错我这些年没少碰。但每次碰到新花样,还是得老老实实翻文档、抓包、一步步排查。今天就把我这些年踩过的坑和修复经验整理出来,希望能帮兄弟们少走弯路。
常见 IOS-XE 报错类型与根因分析
先给个总览表,后面一个个拆开讲:
| 报错类型 | 典型症状 | 根因 | 修复难度 |
|---|---|---|---|
| %PM-4-ERR_DISABLE | 端口状态显示 err-disabled | BPDU 防护/端口安全触发 | ⭐⭐ |
| %SYS-2-MALLOCFAIL | 设备响应缓慢,SSH 断开 | 内存泄漏/路由表过大 | ⭐⭐⭐⭐ |
| %OSPF-5-ADJCHG | OSPF 邻居反复震荡 | 链路抖动/MTU 不匹配 | ⭐⭐⭐ |
| %SEC-6-IPACCESSLOGP | 大量 ACL 日志刷屏 | 配置不当/攻击流量 | ⭐ |
| %CRYPTO-4-RECV_PKT | IPsec VPN 中断 | 密钥不匹配/SA 超时 | ⭐⭐⭐ |
实战修复:ERR-DISABLE 端口恢复
这是最常遇到的坑。我见过太多人一看到 err-disabled 就慌,直接拔线重启。
症状
端口状态显示 err-disabled,show interface 输出里能看到具体原因:
GigabitEthernet1/0/24 is down, line protocol is down (err-disabled)
Reason: psecure-violation
根因分析
说白了就是 IOS-XE 的安全机制太敏感。BPDU guard、port security、UDLD 这些功能一旦触发,直接就把端口给你关了。设计初衷是好的——防止环路和攻击,但有时候就是误杀。
修复步骤
先看具体原因
show interfaces status err-disabled show errdisable detect手动恢复端口
interface GigabitEthernet1/0/24 shutdown no shutdown但这只是临时救火,不解决根本问题。
配置自动恢复(推荐) 我一般直接配自动恢复,省得半夜爬起来手动搞:
errdisable recovery cause all errdisable recovery interval 300如果是 BPDU guard 误触 检查端口连接的到底是交换机还是终端设备:
show spanning-tree interface GigabitEthernet1/0/24 detail如果是接 PC 的端口误开了 PortFast + BPDU guard,调整配置:
interface GigabitEthernet1/0/24 no spanning-tree bpduguard enable
内存泄漏修复:MALLOCFAIL 的噩梦
这个坑我上个月刚踩过。一台 Catalyst 9300 跑了 200 多天,突然 SSH 都连不上,show log 里全是 %SYS-2-MALLOCFAIL。
症状
%SYS-2-MALLOCFAIL: Memory allocation of 65536 bytes failed from 0x12345678, alignment 0
Pool: Processor Free: 4824 Cause: Memory fragmentation
根因分析
IOS-XE 的内存管理其实挺蛋疼的。跑久了之后,内存碎片化严重,即使总空闲内存还有,但找不到连续的大块内存。常见原因:
- OSPF/BGP 路由表太大
- NetFlow 缓存没及时清理
- 某些 SMU 补丁有内存泄漏
修复步骤
紧急止血:释放内存
clear ip route * clear ip ospf process注意:这会导致路由震荡,最好在维护窗口操作。
定位内存泄漏源
show processes memory sorted show memory allocating-process top看看哪个进程在疯狂吃内存。我那次发现是
linux_iosd-imand进程占了 80%。重启相关进程(非整机重载) 这是 IOS-XE 比传统 IOS 好的地方:
hw-module subslot 1/0 reload只重启线卡模块,不影响控制平面。
终极方案:升级版本 查了一下 BugID,发现 CSCwf83684 这个坑。Cisco 在 17.6.3 之后才修了。果断升级:
request platform software package install file flash:cat9k_iosxe.17.09.01.SPA.bin
OSPF 邻居震荡:MTU 问题
这个坑我印象太深了。有一次新加了一台交换机,OSPF 邻居死活建不起来,show log 里疯狂刷 ADJCHG。
症状
%OSPF-5-ADJCHG: Process 1, Nbr 10.0.0.2 on GigabitEthernet1/0/1 from LOADING to FULL, Loading Done
%OSPF-5-ADJCHG: Process 1, Nbr 10.0.0.2 on GigabitEthernet1/0/1 from FULL to DOWN, Neighbor Down: Dead timer expired
根因分析
查了半天发现是 MTU 不一致。对端设备 MTU 设了 1500,我们这边是 9000。OSPF 的 DD 包在传输过程中被分片,导致邻居状态反复横跳。
修复步骤
检查两端 MTU
show interface GigabitEthernet1/0/1 | include MTU统一 MTU 配置
interface GigabitEthernet1/0/1 mtu 1500 ip ospf mtu-ignore注意:
mtu-ignore是临时方案,生产环境最好还是统一 MTU。
FAQ 环节
如何恢复 err-disabled 端口?
最快的方法是 shutdown 再 no shutdown。但建议配置自动恢复:
errdisable recovery cause all
errdisable recovery interval 300
这样 5 分钟后端口会自动恢复,不用人工干预。
当前 Cisco IOS-XE 推荐版本?
截至 2025 年中,17.9.x 和 17.12.x 比较稳。17.15.x 虽然新但坑还不少。我建议:
- 生产环境:17.9.5 或 17.12.2
- 测试环境:可以上 17.15.x 尝鲜
ERR-DISABLE 的常见触发原因?
| 原因 | 触发条件 | 解决方向 |
|---|---|---|
| psecure-violation | MAC 地址冲突 | 调整 port-security 配置 |
| bpduguard | 收到 BPDU 包 | 确认端口角色 |
| udld | 光纤单向链路 | 检查光模块/光纤 |
| link-flap | 端口频繁 UP/DOWN | 检查物理链路 |
| pppoe-ia | PPPoE 认证失败 | 检查 AAA 配置 |
confreg 0x2142 的作用?
这是一个经典的密码恢复方法。设置配置寄存器为 0x2142 后,设备启动时会跳过 startup-config 加载,直接进到初始配置模式。具体操作:
- 重启设备,按 Ctrl+Break 进 ROMmon
- 输入
confreg 0x2142 - 输入
reset重启 - 启动后
copy startup-config running-config恢复配置 - 改密码后记得
config-register 0x2102恢复默认
最后说两句
IOS-XE 的报错修复,说白了就是三个字:看日志。别急着百度,先 show log、show tech-support 把现场信息抓全了再动手。
还有,我强烈建议大家在每台设备上配一个日志服务器。不然等出问题的时候再翻缓冲区的日志,可能已经被覆盖了。我们用的是 ELK,你们随意。
遇到搞不定的报错,欢迎在评论区留言。我尽量回复,但别指望秒回——毕竟我也要搬砖。