当前位置: 首页 > news >正文

揭阳网站建设网站网站建设方案书模板

揭阳网站建设网站,网站建设方案书模板,唐河做网站,国家企业信用信息公示系统山东[deadlock]死锁导致的设备登录无响应问题 一、问题现象二、初步观察三、继续深挖查看netlink相关信息查看warnd进程栈 四、再接再厉查看warnd 用户栈 后记 一、问题现象 实验室一台压力测试设备突然无法登录,无论web页面,ssh或者telnet登录,…

[deadlock]死锁导致的设备登录无响应问题

  • 一、问题现象
  • 二、初步观察
  • 三、继续深挖
    • 查看netlink相关信息
    • 查看warnd进程栈
  • 四、再接再厉
    • 查看warnd 用户栈
  • 后记

一、问题现象

实验室一台压力测试设备突然无法登录,无论web页面,ssh或者telnet登录,都是输入用户名密码后卡在哪里,无法进入管理页面。
如果这样子的话,根本无法调试。幸运的是,有个之前就打开的shell窗口可以使用。这给我们分析调试提供了方便。

二、初步观察

在shell中查看现存和hang住的命令行进程,看看有什么线索。

/var/log# ps | grep cli2812 root      720m S    cli admin 1 admin telnet(10.10.20.11)
15126 root      720m S    cli admin 1 admin telnet(10.10.20.11)
15264 root      720m S    cli admin 0 admin console
21947 root     16448 S    grep cli

这里有3个cli进程,有除了2812是我们当前在使用的,剩下两个都是无响应的。查看进程的内核栈信息。

/var/log# cat /proc/15264/stack
[<ffffffff8080a819>] netlink_attachskb+0x189/0x1d0
[<ffffffff8080a991>] netlink_unicast+0xa1/0x1f0
[<ffffffff8080ad81>] netlink_sendmsg+0x1c1/0x3e0
[<ffffffff80799b8a>] sock_sendmsg+0x1a/0x30
[<ffffffff8079a376>] ___sys_sendmsg+0x1e6/0x200
[<ffffffff8079b404>] SyS_sendmsg+0x44/0x80
[<ffffffff802016d5>] do_syscall_64+0x75/0x2c0
[<ffffffff80c0008d>] entry_SYSCALL_64_after_hwframe+0x59/0xbe
[<ffffffffffffffff>] 0xffffffffffffffff
/var/log# cat /proc/15126/stack
[<ffffffff8080a819>] netlink_attachskb+0x189/0x1d0
[<ffffffff8080a991>] netlink_unicast+0xa1/0x1f0
[<ffffffff8080ad81>] netlink_sendmsg+0x1c1/0x3e0
[<ffffffff80799b8a>] sock_sendmsg+0x1a/0x30
[<ffffffff8079a376>] ___sys_sendmsg+0x1e6/0x200
[<ffffffff8079b404>] SyS_sendmsg+0x44/0x80
[<ffffffff802016d5>] do_syscall_64+0x75/0x2c0
[<ffffffff80c0008d>] entry_SYSCALL_64_after_hwframe+0x59/0xbe
[<ffffffffffffffff>] 0xffffffffffffffff
/var/log# cat /proc/2812/stack
[<ffffffff80255f6a>] do_wait+0x1aa/0x210
[<ffffffff802570f7>] kernel_wait4+0x97/0x120
[<ffffffff802571ef>] SyS_wait4+0x6f/0x80
[<ffffffff802016d5>] do_syscall_64+0x75/0x2c0
[<ffffffff80c0008d>] entry_SYSCALL_64_after_hwframe+0x59/0xbe
[<ffffffffffffffff>] 0xffffffffffffffff

可以发现 15126和15264进程都卡在了 netlink发送等待上。怀疑netlink socket收包队列有积压,导致发送端处于等待发送状态。

三、继续深挖

查看netlink相关信息

/var/log# cat /proc/net/netlink 
sk       Eth Pid    Groups   Rmem     Wmem     Dump     Locks     Drops     Inode
ffff88880b2cb000 0   2851   00000000 0        0        0 2        0        12002   
ffff888806d6e800 0   2707076566 00000000 0        0        0 2        0        12784   
ffff888806d6a000 0   3780   00000551 0        0        0 2        0        12810   
ffff88885a980000 0   0      00000000 0        0        0 2        0        3       
ffff88880a1b6000 0   2825818928 00000111 0        0        0 2        0        20919   
ffff888806d6d800 0   3498   00000111 0        0        0 2        0        12783   
ffff88880c210000 0   3410172620 00000000 0        0        0 2        0        12811   
ffff88880b2cb800 0   2855   00000001 0        0        0 2        0        11851   
ffff88880a5bf800 15  10000038 00000000 33557184 0        0 27       0        1652  --问题socket
//省略部分无关socket

发现socket ffff88880a5bf800 存在大量积压,基本确认是积压导致。

根据Eth 15 和Pid 10000038 ,对照代码发现是发送和接收告警信息的socket,负责接收处理的进程是warnd。

查看warnd进程栈

/var/log# ps | grep warnd2849 root     2325m S    /bin/warnd
22135 root     16448 S    grep warnd
/var/log# cat /proc/2849/stack
[<ffffffff802bfe03>] futex_wait_queue_me+0xc3/0x120
[<ffffffff802c01e2>] futex_wait+0x102/0x230
[<ffffffff802c275e>] do_futex+0x14e/0xc30
[<ffffffff802c32ab>] SyS_futex+0x6b/0x140
[<ffffffff802016d5>] do_syscall_64+0x75/0x2c0
[<ffffffff80c0008d>] entry_SYSCALL_64_a

发现warnd在等待futex 锁,是那个操作导致的呢,这就需要查看用户态的调用栈了。

四、再接再厉

查看warnd 用户栈

用gdb attach上warnd进程,查看当前栈

/var/log# gdb
GNU gdb (GDB) 11.2
Copyright (C) 2022 Free Software Foundation, Inc.
//省略无关部分
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) attach 2849
Attaching to process 2849
[New LWP 2945]
[New LWP 2946]
[New LWP 2947]
//省略无关部分
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
0x00007fcab97e4059 in ?? () from /lib/libc.so.6
(gdb) info threadId   Target Id                                 Frame 
* 1    Thread 0x7fcab8929800 (LWP 2849) "warnd" 0x00007fcab97e4059 in ?? () from /lib/libc.so.62    Thread 0x7fcab8924640 (LWP 2945) "warnd" 0x00007fcab97e4059 in ?? () from /lib/libc.so.63    Thread 0x7fcab8123640 (LWP 2946) "warnd" 0x00007fcab97e4059 in ?? () from /lib/libc.so.64    Thread 0x7fcab7922640 (LWP 2947) "warnd" 0x00007fcab97e4059 in ?? () from /lib/libc.so.6
//省略无关部分34   Thread 0x7fcaa802b640 (LWP 8217) "warnd" 0x00007fcab97e4059 in ?? () from /lib/libc.so.635   Thread 0x7fcaa782a640 (LWP 8238) "warnd" 0x00007fcab9868add in sendmsg () from /lib/libc.so.636   Thread 0x7fcaa7029640 (LWP 8245) "warnd" 0x00007fcab97e4059 in ?? () from /lib/libc.so.637   Thread 0x7fcaa611f640 (LWP 8260) "warnd" 0x00007fcab97e4059 in ?? () from /lib/libc.so.638   Thread 0x7fcaa590d640 (LWP 8267) "warnd" 0x00007fcab97e4059 in ?? () from /lib/libc.so.639   Thread 0x7fcaa510c640 (LWP 8268) "warnd" 0x00007fcab9867196 in epoll_wait () from /lib/libc.so.6

除了线程35和39外,其他线程全部卡在相同的位置。

查看线程1,可以知道系统调用线程读写锁的写锁时因为得不到调度进入了休眠。那么这个锁被那个线程占有了呢?

(gdb) thread 1
[Switching to thread 1 (Thread 0x7fcab8929800 (LWP 2849))]
#0  0x00007fcab97e4059 in ?? () from /lib/libc.so.6
(gdb) bt full
#0  0x00007fcab97e4059 in ?? () from /lib/libc.so.6
No symbol table info available.
#1  0x00007fcab97ed4f1 in pthread_rwlock_wrlock () from /lib/libc.so.6
No symbol table info available.
#2  0x000000000040d5d3 in ?? ()
No symbol table info available.
#3  0x0000000000404ad9 in ?? ()
No symbol table info available.
#4  0x00007fcab978b1f7 in ?? () from /lib/libc.so.6
No symbol table info available.
#5  0x00007fcab978b2ac in __libc_start_main () from /lib/libc.so.6
No symbol table info available.
#6  0x0000000000404b01 in ?? ()
No symbol table info available.

我们再查看看35线程。通过查看代码发现,在sendmsg之前,线程已经持通过pthread_rwlock_wrlock 持有了写锁。也就是其他线程都在等待35线程释放写锁。那么35线程为什么不释放写锁呢?

  (gdb) thread 35
[Switching to thread 35 (Thread 0x7fcaa782a640 (LWP 8238))]
#0  0x00007fcab9868add in sendmsg () from /lib/libc.so.6
(gdb) bt full
#0  0x00007fcab9868add in sendmsg () from /lib/libc.so.6
No symbol table info available.
#1  0x00007fcab967f81d in fun_nl_sendto0 () from /lib/libfun_nl_ipc.so
No symbol table info available.
#2  0x00007fcab9b2a61a in send_warn () from /lib/libwarnapi.so
No symbol table info available.
#3  0x00000000004159d0 in ?? ()
No symbol table info available.
#4  0x0000000000415dbc in ?? ()
No symbol table info available.
#5  0x000000000040c9c5 in ?? ()
No symbol table info available.
#6  0x00007fcab9b62067 in ?? () from /lib/libevent.so
No symbol table info available.
#7  0x00007fcab9b62314 in ?? () from /lib/libevent.so
No symbol table info available.
#8  0x00007fcab9b62568 in ?? () from /lib/libevent.so
No symbol table info available.
#9  0x000000000040ca8e in ?? ()
No symbol table info available.
#10 0x00007fcab97e731a in ?? () from /lib/libc.so.6
No symbol table info available.
#11 0x00007fcab9866db0 in clone () from /lib/libc.so.6

查代码发现35线程sendmsg就是向 已经积压的netlink socket 发送warn消息。因为netlink socket积压,导致35线程进入休眠等待。

分析到这里,基本逻辑差不多通顺了。

  1. 压力测试导致netlink socket积压
  2. 35线程获取写锁后,向netlink socket发送消息。因为积压导致休眠。
  3. 其他线程包括netlink socket消息接受处理的线程因为获取不到写锁,导致休眠。
  4. 此时:线程35发送消息持有写锁,等待netlink socket buffer空闲。处理netlink socket消息的线程,等待写锁。–根因
  5. cli命令行进程会向warnd发送netlink消息,因为netlink socket消息积压(消息没有得到及时处理),导致发送进程进入等待休眠。

后记

warnd进程主要处理其他进程发来的warn消息,自己也发送warn消息。在锁的处理上不够完善,导致压力测试下,socket接收队列打满后,形成了死锁。


文章转载自:
http://moore.spkw.cn
http://carter.spkw.cn
http://changeful.spkw.cn
http://pinholder.spkw.cn
http://yellowness.spkw.cn
http://picul.spkw.cn
http://thigmotaxis.spkw.cn
http://whipsaw.spkw.cn
http://ruching.spkw.cn
http://liquidly.spkw.cn
http://facete.spkw.cn
http://nibble.spkw.cn
http://ablush.spkw.cn
http://matronage.spkw.cn
http://unpracticed.spkw.cn
http://underexercise.spkw.cn
http://agami.spkw.cn
http://truculence.spkw.cn
http://spag.spkw.cn
http://unshunned.spkw.cn
http://fat.spkw.cn
http://mothy.spkw.cn
http://purgatory.spkw.cn
http://multipartite.spkw.cn
http://glossematics.spkw.cn
http://lingulate.spkw.cn
http://corrasive.spkw.cn
http://ingratiatory.spkw.cn
http://taffeta.spkw.cn
http://helaine.spkw.cn
http://hemimorphite.spkw.cn
http://lps.spkw.cn
http://privateersman.spkw.cn
http://nonchalant.spkw.cn
http://rostrate.spkw.cn
http://pylon.spkw.cn
http://nerved.spkw.cn
http://bind.spkw.cn
http://choreographic.spkw.cn
http://cerebrum.spkw.cn
http://amalgam.spkw.cn
http://plastid.spkw.cn
http://granary.spkw.cn
http://trimming.spkw.cn
http://mandarin.spkw.cn
http://measuring.spkw.cn
http://monarchism.spkw.cn
http://grasseater.spkw.cn
http://humanize.spkw.cn
http://touchhole.spkw.cn
http://mammalian.spkw.cn
http://lucretia.spkw.cn
http://inquisitorial.spkw.cn
http://nonaligned.spkw.cn
http://hadal.spkw.cn
http://poorboy.spkw.cn
http://carsick.spkw.cn
http://libran.spkw.cn
http://usury.spkw.cn
http://rarified.spkw.cn
http://peck.spkw.cn
http://gnosis.spkw.cn
http://aghast.spkw.cn
http://dendrochronology.spkw.cn
http://gelable.spkw.cn
http://vacillation.spkw.cn
http://bicornuate.spkw.cn
http://fletcherism.spkw.cn
http://reconnaissance.spkw.cn
http://festination.spkw.cn
http://cataract.spkw.cn
http://chemostat.spkw.cn
http://handclasp.spkw.cn
http://homeothermic.spkw.cn
http://tidbit.spkw.cn
http://remoralize.spkw.cn
http://respectable.spkw.cn
http://latinize.spkw.cn
http://ethnologist.spkw.cn
http://seclude.spkw.cn
http://kickback.spkw.cn
http://biomaterial.spkw.cn
http://calicoback.spkw.cn
http://scots.spkw.cn
http://counteraccusation.spkw.cn
http://homochromatic.spkw.cn
http://hydropress.spkw.cn
http://snowbank.spkw.cn
http://trimaran.spkw.cn
http://erogenous.spkw.cn
http://rheology.spkw.cn
http://ephemerality.spkw.cn
http://philippeville.spkw.cn
http://unimodal.spkw.cn
http://labor.spkw.cn
http://arsenite.spkw.cn
http://barrowman.spkw.cn
http://coltish.spkw.cn
http://gazel.spkw.cn
http://flagellant.spkw.cn
http://www.15wanjia.com/news/84109.html

相关文章:

  • 微商做图王官方网站如何去除痘痘效果好
  • 网站 制作公司上海网站建设费用
  • 太仓网站制作百度灰色关键词排名
  • 网站开发什么课程小红书怎么推广
  • 佛山怎么做网站seo营销怎么做
  • 用自己服务器做网站成年学校培训班
  • 大连软件公司有哪些珠海seo排名收费
  • 手机网站建设用乐云seo定制网站建设推广服务
  • 软件工程考研科目合肥网络seo
  • 腾讯云主机永久免费成都自然排名优化
  • 漳州做网站开发seo 推广教程
  • b2b网站有哪些盈利模式常见的网络推广方式有哪些
  • 旅游网站开发的意义是什么整合营销名词解释
  • 长沙十大景点seo优化排名
  • 凡科论坛网站制作东莞优化网站制作
  • 全国注册室内设计师网网站关键词seo排名
  • 爱站网长尾关键词搜索宁波seo网络优化公司
  • 各大网站rss地址seo关键词优化推广
  • 做网站好看的旅行背景图片学营销app哪个更好
  • 凡科2网站需要备案吗口碑营销推广
  • wordpress插件影响网站谷歌seo和百度区别
  • 有名做网站公司网站制作费用一览表
  • 做网站 先上线再调整seo 是什么
  • 学校定制网站建设公司无锡百度推广代理公司
  • 做照片有那些网站好怎么做好网站方式推广
  • 做企划的网站武汉网络推广有限公司
  • 网站建设管理 优帮云搜索推广开户
  • 什么平台可以做网站推广友情链接方面
  • 有什么网站有教师招聘考试题目做360优化大师下载
  • 专门做游轮的网站百度推广河南总部