网口up不起来问题排查
最近处理一个问题,发现有的网口up不起来。 | |
ethtool eth6 | |
Settings for eth6: | |
Supported ports: [ FIBRE ] | |
Supported link modes: 10000baseT/Full | |
Supports auto-negotiation: No | |
Advertised link modes: 10000baseT/Full | |
Advertised pause frame use: No | |
Advertised auto-negotiation: No | |
Speed: 10000Mb/s | |
Duplex: Full | |
Port: FIBRE | |
PHYAD: 0 | |
Transceiver: external | |
Auto-negotiation: off | |
Supports Wake-on: g | |
Wake-on: g | |
Current message level: 0x0000000f (15) | |
drv probe link timer | |
Link detected: no | |
ifconfig eth6 up 没有反应。 | |
strace这个过程,打印如下: | |
ioctl(4, SIOCGIFFLAGS, {ifr_name="eth6", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_SLAVE|IFF_MULTICAST}) = 0 | |
ioctl(4, SIOCSIFFLAGS, 0x7ffc98d26c90) = 0 | |
exit_group(0) = ? | |
内核代码流程是: | |
case SIOCSIFFLAGS: /* Set interface flags */ | |
return dev_change_flags(dev, ifr->ifr_flags); | |
返回0按道理是正常的,为什么起不来。 | |
于是干脆再down一遍,奇迹出现了,down完之后再up,再进行strace,发现有如下打印: | |
ioctl(4, SIOCSIFFLAGS, 0x7fff37670450) = -1 ENOMEM (Cannot allocate memory) | |
dup(2) = 6 | |
fcntl(6, F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE) | |
fstat(6, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 28), ...}) = 0 | |
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9972e0e000 | |
lseek(6, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek) | |
write(6, "SIOCSIFFLAGS: Cannot allocate me"..., 37SIOCSIFFLAGS: Cannot allocate memory | |
) = 37 | |
close(6) = 0 | |
munmap(0x7f9972e0e000, 4096) = 0 | |
exit_group(-1) = ? | |
分配不到内存,于是查看dmesg,有新的发现: | |
调用堆栈如下: | |
JAedge6:~ # dmesg | |
[9162409.155614] ifconfig: page allocation failure: order:5, mode:0x80d0 | |
[9162409.155619] Pid: 781, comm: ifconfig Tainted: G ENX 3.0.101-0.47.52-default #1 | |
[9162409.155620] Call Trace: | |
[9162409.155634] [<ffffffff81004b95>] dump_trace+0x75/0x300 | |
[9162409.155641] [<ffffffff81461d43>] dump_stack+0x69/0x6f | |
[9162409.155648] [<ffffffff811024e6>] warn_alloc_failed+0xc6/0x170 | |
[9162409.155652] [<ffffffff811040f1>] __alloc_pages_slowpath+0x561/0x7f0--------进入了slowpath, | |
[9162409.155655] [<ffffffff81104569>] __alloc_pages_nodemask+0x1e9/0x200 | |
[9162409.155660] [<ffffffff81007746>] dma_generic_alloc_coherent+0xa6/0x160 | |
[9162409.155666] [<ffffffff81030f18>] x86_swiotlb_alloc_coherent+0x28/0x80 | |
[9162409.155684] [<ffffffffa05a5aa1>] i40e_setup_tx_descriptors+0xf1/0x140 [i40e] | |
[9162409.155713] [<ffffffffa05869cd>] i40e_vsi_setup_tx_resources+0x2d/0x60 [i40e] | |
[9162409.155722] [<ffffffffa058b347>] i40e_vsi_open+0x27/0x1c0 [i40e] | |
[9162409.155731] [<ffffffffa058b53b>] i40e_open+0x5b/0x90 [i40e] | |
[9162409.155741] [<ffffffff813a5da7>] __dev_open+0xa7/0x110 | |
[9162409.155745] [<ffffffff813a48fb>] __dev_change_flags+0x9b/0x180--------------熟悉的函数 | |
[9162409.155749] [<ffffffff813a5cb0>] dev_change_flags+0x20/0x70 | |
[9162409.155753] [<ffffffff8140a955>] devinet_ioctl+0x5b5/0x620 | |
[9162409.155758] [<ffffffff8138f509>] sock_do_ioctl+0x29/0x60 | |
[9162409.155761] [<ffffffff8138f86b>] sock_ioctl+0x7b/0x280 | |
[9162409.155765] [<ffffffff8116ec3b>] do_vfs_ioctl+0x8b/0x3b0 | |
[9162409.155768] [<ffffffff8116f001>] sys_ioctl+0xa1/0xb0 | |
[9162409.155772] [<ffffffff8146cda7>] tracesys+0xd9/0xde | |
[9162409.155787] [<00007fb7de2a6ce7>] 0x7fb7de2a6ce6 | |
根据分配模式mode:0x80d0,可以知道宏值为: | |
#define ___GFP_HIGH 0x20u | |
#define ___GFP_IO 0x40u | |
#define ___GFP_FS 0x80u | |
#define ___GFP_ZERO 0x8000u | |
要分配的内存大小为32*4k=128k | |
既然进入了slowpath,那么说明没有合适的块。 | |
[9162409.162691] Node 0 DMA free:15904kB min:120kB low:148kB high:180kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:15680kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? yes | |
[9162409.162696] lowmem_reserve[]: 0 1599 128859 128859 | |
[9162409.162698] Node 0 DMA32 free:521760kB min:12684kB low:15852kB high:19024kB active_anon:1372kB inactive_anon:17864kB active_file:396kB inactive_file:800932kB unevictable:6464kB isolated(anon):0kB isolated(file):0kB present:1637408kB mlocked:6464kB dirty:0kB writeback:0kB mapped:324kB shmem:17892kB slab_reclaimable:9804kB slab_unreclaimable:117188kB kernel_stack:16kB pagetables:204kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no | |
[9162409.162704] lowmem_reserve[]: 0 0 127260 127260 | |
[9162409.162706] Node 0 Normal free:1516580kB min:1009708kB low:1262132kB high:1514560kB active_anon:8746684kB inactive_anon:2298136kB active_file:1093096kB inactive_file:96852196kB unevictable:15591060kB isolated(anon):0kB isolated(file):0kB present:130314240kB mlocked:15591096kB dirty:608kB writeback:0kB mapped:128548kB shmem:2307616kB slab_reclaimable:367732kB slab_unreclaimable:2127656kB kernel_stack:31920kB pagetables:223776kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no | |
[9162409.162712] lowmem_reserve[]: 0 0 0 0 | |
[9162409.162714] Node 1 Normal free:1621196kB min:1025480kB low:1281848kB high:1538220kB active_anon:11279020kB inactive_anon:1941384kB active_file:1080860kB inactive_file:88023016kB unevictable:24280980kB isolated(anon):0kB isolated(file):0kB present:132349388kB mlocked:24280984kB dirty:812kB writeback:0kB mapped:5795476kB shmem:7620708kB slab_reclaimable:358276kB slab_unreclaimable:1995312kB kernel_stack:24040kB pagetables:271884kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no | |
[9162449.769662] ifconfig: page allocation failure: order:6, mode:0xd0-------------也有这种模式的 | |
[9162449.769669] Pid: 17429, comm: ifconfig Tainted: G ENX 3.0.101-0.47.52-default #1 | |
[9162449.769672] Call Trace: | |
[9162449.769689] [<ffffffff81004b95>] dump_trace+0x75/0x300 | |
[9162449.769700] [<ffffffff81461d43>] dump_stack+0x69/0x6f | |
[9162449.769712] [<ffffffff811024e6>] warn_alloc_failed+0xc6/0x170 | |
[9162449.769721] [<ffffffff811040f1>] __alloc_pages_slowpath+0x561/0x7f0 | |
[9162449.769731] [<ffffffff81104569>] __alloc_pages_nodemask+0x1e9/0x200 | |
[9162449.769740] [<ffffffff81145b73>] kmem_getpages+0x53/0x180 | |
[9162449.769746] [<ffffffff81146976>] fallback_alloc+0x196/0x270 | |
[9162449.769753] [<ffffffff8114701c>] __kmalloc+0x28c/0x330 | |
[9162449.769786] [<ffffffffa05a59ec>] i40e_setup_tx_descriptors+0x3c/0x140 [i40e] | |
[9162449.769856] [<ffffffffa05869cd>] i40e_vsi_setup_tx_resources+0x2d/0x60 [i40e] | |
[9162449.769876] [<ffffffffa058b347>] i40e_vsi_open+0x27/0x1c0 [i40e] | |
[9162449.769907] [<ffffffffa058b53b>] i40e_open+0x5b/0x90 [i40e] | |
[9162449.769930] [<ffffffff813a5da7>] __dev_open+0xa7/0x110 | |
[9162449.769939] [<ffffffff813a48fb>] __dev_change_flags+0x9b/0x180 | |
[9162449.769949] [<ffffffff813a5cb0>] dev_change_flags+0x20/0x70 | |
[9162449.769957] [<ffffffff8140a955>] devinet_ioctl+0x5b5/0x620 | |
[9162449.769964] [<ffffffff8138f509>] sock_do_ioctl+0x29/0x60 | |
[9162449.769970] [<ffffffff8138f86b>] sock_ioctl+0x7b/0x280 | |
[9162449.770006] [<ffffffff8116ec3b>] do_vfs_ioctl+0x8b/0x3b0 | |
[9162449.770012] [<ffffffff8116f001>] sys_ioctl+0xa1/0xb0 | |
[9162449.770019] [<ffffffff8146cda7>] tracesys+0xd9/0xde | |
[9162449.770050] [<00007fdde024ace7>] 0x7fdde024ace6 | |
在合并之前, | |
JAedge6:~ # cat /proc/buddyinfo | |
Node 0, zone DMA 0 0 0 1 2 1 1 0 1 1 3 | |
Node 0, zone DMA32 419 643 403 451 313 225 235 251 148 48 3 | |
Node 0, zone Normal 20962 68138 35642 2430 161 2 0 0 0 0 1 | |
Node 1, zone Normal 68686 157150 906 8 0 0 0 0 0 0 1 | |
明明还有最大的一块内存可以拆分,为啥没拆? | |
ok,手动合并块。 | |
echo 1 > /proc/sys/vm/drop_caches | |
JAedge6:~ # cat /proc/buddyinfo | |
Node 0, zone DMA 0 0 0 1 2 1 1 0 1 1 3 | |
Node 0, zone DMA32 8557 8460 7429 5915 3586 1499 380 260 148 48 3 | |
Node 0, zone Normal 2834074 2826437 1777328 672633 109003 4046 16 0 0 0 1 | |
Node 1, zone Normal 2943155 2702189 1645931 586739 83425 2255 2 0 0 0 1 | |
echo 2 > /proc/sys/vm/drop_caches | |
echo 3 > /proc/sys/vm/drop_caches | |
JAedge6:~ # cat /proc/buddyinfo | |
Node 0, zone DMA 0 0 0 1 2 1 1 0 1 1 3 | |
Node 0, zone DMA32 6201 5597 4910 4359 3225 1898 624 332 153 48 3 | |
Node 0, zone Normal 1453979 2550503 1714926 796684 187727 13800 151 0 0 0 1 | |
Node 1, zone Normal 1619014 2484161 1619823 701543 144586 7165 7 0 0 0 1 | |
对比合并之后:发现再往大块的合并并没有明显增加,但是至少256的块是有了。 | |
再次操作先网口down,再up,都起来了。 | |
但是为什么要先down再up,这个一直没搞清楚,看strace的话,怀疑是__dev_close的时候会释放一些内存,然后立刻up的话,这些内存能给我用。 |
网口up不起来问题排查的更多相关文章
- Tomcat shutdown执行后无法退出进程问题排查及解决
问题定位及排查 上周无意中调试程序在Linux上ps -ef|grep tomcat发现有许多tomcat的进程,当时因为没有影响系统运行就没当回事.而且我内心总觉得这可能是tomcat像nginx一 ...
- myrocks复制中断问题排查
背景 mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛.随着SSD逐渐普及,硬件存储成本越来越高,面向写优化 ...
- Java线上应用故障排查之一:高CPU占用
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. 以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题. 根据top命令,发现PID为28555的Java进程占 ...
- wordpress插件bug排查后记(记一次由于开启memecached引起的插件bug)
这篇文章是写给自己的. 周三的时候我在维护公司的一个wordpress项目页面时发现了一个非常奇怪的情况:当我尝试更新网站上的一个页面后,在wordpress后台的编辑器中发现其内容并没有按我预期的将 ...
- [AlwaysOn Availability Groups]AG排查和监控指南
AG排查和监控指南 1. 排查场景 如下表包含了常用排查的场景.根据被分为几个场景类型,比如Configuration,client connectivity,failover和performance ...
- mysql半同步复制问题排查
1.问题背景 默认情况下,线上的mysql复制都是异步复制,因此在极端情况下,主备切换时,会有一定的概率备库比主库数据少,因此切换后,我们会通过工具进行回滚回补,确保数据不丢失.半同步复制则 ...
- 数据库实战案例—————记一次TempDB暴增的问题排查
前言 很多时候数据库的TempDB.日志等文件的暴增可能导致磁盘空间被占满,如果日常配置不到位,往往会导致数据库故障,业务被迫中断. 这种文件暴增很难排查,经验不足的一些运维人员可能更是无法排查具体原 ...
- 一次xbuild编译失败的排查
今天一个待上线服务测试完毕,需要构建CI,按照模板配置好包还原,xbuild编译,报错,错误信息如下: EtcdRegister.cs(8,15): error CS0234: The type or ...
- 一次kibana服务失败的排查过程
公司在kubernetes集群上稳定运行数月的kibana服务于昨天下午突然无法正常提供服务,访问kibana地址后提示如下信息: 排查过程: 看到提示后,第一反应肯定是检查elasticsearch ...
随机推荐
- Python新手需要掌握的知识点
一.基础语法 1 变量 2 逻辑判断 3 循环 4 函数 二.数据结构 1 数字(加减乘除) 2 字符串(一串字符) 3 布尔 (真假) 4 元组 (不能修改的列表) 5 列表(Python的苦力,最 ...
- ElfJS从入门到精通(一)
介绍 Elf.js是一个简洁的高效的JavaScript框架.它不仅高度重视用户的体验,也高度重视开发者的体验.在实现当今主流技术的同时,以尽可能原生态的形式展现出来.在如今花样繁多的框架中,你是否感 ...
- Js相关用法个人总结
Js相关用法个人总结 js中将数组元素添加到对象中var obj = {}; var pushArr = [11,22,33,44,55,66]; for(var i=0;i<pushArr. ...
- 如何用Fritzing实现元器件自定义接线图
在用Micropython开发板完成小实验时,很多朋友反应对照接线图实际接线有时会有一些困扰.今天给大家介绍一款画图软件Fritzing 看看是怎么自定义制作接线图的. 前提条件 1.准备好元器件 ...
- 计算机基础理论知识梳理篇(三):VLAN与VLAN网卡相关概念
VLAN(Virtual Local Area Network) 虚拟局域网(VLAN,802.1Q)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能.部门及应用等因素将它们 ...
- 基于IndexedDB实现简单文件系统
现在的indexedDB已经有几个成熟的库了,比如西面这几个,任何一个都是非常出色的. 用别人的东西好处是上手快,看文档就好,要是文档不太好,那就有点尴尬了. dexie.js :A Minimali ...
- 解决 iPhone 微信 H5 无法自动播放音乐问题
使用 wx sdk 在html导入sdk js文件.(如果网站是https导入的sdk也要使用https!) 然后在 wx.ready 中设置 play 方法并复制给全局变量 fm,当需要使用的时候再 ...
- Git Workflow简介
1. Git WorkFlow介绍 Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践.Git Flow是一套使用Git进行源代码管理时的一套行为 ...
- Ubuntu 搭建简单的git server
Git 可以使用四种主要的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议. 在此,我们将会讨论那些协议及哪些情形应该使用(或避免使用)他 ...
- 如何在 iOS 真机运行 Appium
使用 gui 启动的 appium 1.2.2 也会有这个问题,所以你要把 deviceconsole 复制到 /Applications/Appium.app/Contents/Resources/ ...