欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用strace查找進程卡死的原因分析

 更新時間:2023年06月21日 09:39:47   作者:SoulNov23  
這篇文章主要介紹了用strace查找進程卡死的原因分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

用strace查找進程卡死原因

最近遇到進程卡死的情況,但是自己調(diào)試的過程中并不一定能復(fù)現(xiàn),都是需要運行一段時間某些條件下才會觸發(fā),對于這種運行著不能破壞現(xiàn)場的情況,我們可以使用gdb -p和strace -p來跟蹤。

首先我們用ps auxf

查看我們的進程執(zhí)行到了哪一步:

可以看到執(zhí)行到了docker exec -i 178.20.1.229_0115034556 ls然后就卡死了

然后我們進一步通過

strace查看執(zhí)行這個操作死在哪個系統(tǒng)回調(diào)了:

這里可以看到死在了系統(tǒng)回調(diào)read這里

描述符19的具體意義我們可以進入/proc/pid/fd再查看一下:

我們可以發(fā)現(xiàn),19代表的是pipe,我們這里是死在了讀pipe上面。

/************************************************/

分割線,后面再次出現(xiàn)這個問題

我們先用ps auxf查看進程號和進程執(zhí)行到了哪一步,可以看到進程號是27678,卡在docker exec

root     27678  0.3  0.4 512172 16500  Sl    python /wns/cloud/app/com_host/main.pyc
root     25011  0.0  0.0   4332   652  S      \_ /bin/sh -c docker exec -i mongo_docker_master ls
root     25014  0.0  0.2 136592 10600  Sl         \_ docker exec -i mongo_docker_master ls

繼續(xù)用strace -p 27678跟蹤

發(fā)現(xiàn)卡在read,文件描述符是14

root@localhost:/# strace -p 27678      
Process 27678 attached
read(14,

接著我們cd /proc/27678/

在這里我們可以查看進程狀態(tài)

root@localhost:/proc/27678# cat status 
Name:	python
State:	S (sleeping)
Tgid:	27678
Ngid:	0
Pid:	27678
PPid:	27677

查看進程的內(nèi)核堆棧的調(diào)試信息

wchan表示導(dǎo)致進程睡眠或者等待的函數(shù)

root@localhost:/proc/27678# cat stack 
[<ffffffff811a91ab>] pipe_wait+0x6b/0x90
[<ffffffff811a9c04>] pipe_read+0x344/0x4f0
[<ffffffff811a00bf>] do_sync_read+0x7f/0xb0
[<ffffffff811a0681>] vfs_read+0xb1/0x130
[<ffffffff811a1110>] SyS_read+0x80/0xe0
[<ffffffff818d4c49>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
root@localhost:/proc/27678# cat wchan 
pipe_wait

現(xiàn)在我們查看一下進程打開的文件描述符14代表什么

pipe文件

root@localhost:/proc/27678# ls -l ./fd
total 0
lr-x------ 1 root root 64 Mar 26 17:19 0 -> pipe:[30690124]
l-wx------ 1 root root 64 Mar 26 17:19 1 -> pipe:[30690125]
lrwx------ 1 root root 64 Mar 26 17:19 10 -> socket:[30691732]
lr-x------ 1 root root 64 Mar 26 17:19 11 -> /dev/urandom
lrwx------ 1 root root 64 Mar 26 17:19 12 -> socket:[30719611]
lrwx------ 1 root root 64 Mar 26 17:19 13 -> socket:[30719610]
lr-x------ 1 root root 64 Mar 26 17:19 14 -> pipe:[38483750]

我們已經(jīng)可以確定main創(chuàng)建子進程執(zhí)行shell命令docker exec -i mongo_docker_master ls,同時通過pipe和子進程通信,結(jié)果卡在了read pipe上。

其實在這里我們也可以使用lsof來定位

可以看到進程27678打開的FD 14是pipe,這里u代表可讀可寫,r代表可讀

sangfor ~ # lsof -d 14
COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF     NODE NAME
mongod     1907 root   14u   REG              251,0    36864   130683 /wns/data/mongodb/db/collection-7--588642557116981989.wt
syslog-ng  3446 root   14u  unix 0xffff88012227d800      0t0 40557736 /dev/log
dockerd    4025 root   14u  unix 0xffff8800b8d5d800      0t0    13941 /run/docker/libnetwork/a73bd949b5fbb89c2b8bec3b4ac6af0a948a944958c8b037d9e6c9b324b44331.sock
docker-co  9382 root   14u  0000                0,9        0     9553 anon_inode
docker-co 21204 root   14u  0000                0,9        0     9553 anon_inode
python    27678 root   14r  FIFO                0,8      0t0 38483750 pipe

也可以直接查看進程27678打開的

可以看到14是pipe

sangfor ~ # lsof -p 27678
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF     NODE NAME
python  27678 root    0r  FIFO                0,8      0t0 30690124 pipe
python  27678 root    1w  FIFO                0,8      0t0 30690125 pipe
python  27678 root    2w  FIFO                0,8      0t0 30690126 pipe
python  27678 root    3u  0000                0,9        0     9553 anon_inode
python  27678 root    4u  0000                0,9        0     9553 anon_inode
python  27678 root    5u  pack           30691718      0t0  unknown type=SOCK_RAW
python  27678 root    6w   REG              251,0 76106652   130565 /wns/data/com_host/etc/config/err.log
python  27678 root    7u  IPv4           30691716      0t0      TCP Sangfor:53102->Sangfor:42457 (ESTABLISHED)
python  27678 root    8u  IPv4           30691717      0t0      TCP Sangfor:42457->Sangfor:53102 (ESTABLISHED)
python  27678 root    9u  IPv4           30691731      0t0      TCP db.sdwan:54072->sdwan.io:27017 (ESTABLISHED)
python  27678 root   10u  IPv4           30691732      0t0      TCP db.sdwan:54074->sdwan.io:27017 (ESTABLISHED)
python  27678 root   11r   CHR                1,9      0t0 30690329 /dev/urandom
python  27678 root   12u  IPv4           30719611      0t0      TCP db.sdwan:51404->db.sdwan:37017 (ESTABLISHED)
python  27678 root   13u  IPv4           30719610      0t0      TCP db.sdwan:47124->db.sdwan:27017 (ESTABLISHED)
python  27678 root   14r  FIFO                0,8      0t0 38483750 pipe

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • linux?服務(wù)器安裝gcc8的問題記錄

    linux?服務(wù)器安裝gcc8的問題記錄

    我原本安裝了gcc13.0版本,但是版本太高了,導(dǎo)致我安裝cuda報錯gcc版本太高,所以就安裝低版本的gcc,下面通過本文給大家分享linux?服務(wù)器安裝gcc8的問題記錄,感興趣的朋友一起看看吧
    2024-07-07
  • Linux上通過SSH掛載遠程文件系統(tǒng)方法詳解

    Linux上通過SSH掛載遠程文件系統(tǒng)方法詳解

    在本篇內(nèi)容里小編給大家整理了關(guān)于在Linux上通過SSH掛載遠程文件系統(tǒng)的相關(guān)知識點,需要的朋友們跟著學習下。
    2019-03-03
  • Linux shell利用sed如何批量更改文件名詳解

    Linux shell利用sed如何批量更改文件名詳解

    最近在學習shell,為了練習sed,寫了個簡單的批量修改文件名的腳本,所以下面這篇文章主要給大家介紹了關(guān)于Linux shell利用sed如何批量更改文件名的相關(guān)資料,需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • 詳解CentOS7 FTP服務(wù)搭建(虛擬用戶訪問FTP服務(wù))

    詳解CentOS7 FTP服務(wù)搭建(虛擬用戶訪問FTP服務(wù))

    Liunx外部文件的傳輸,避免不了使用FTP服務(wù),所以現(xiàn)在就整理下,CentOS7環(huán)境下,F(xiàn)TP服務(wù)的搭建。有興趣的可以了解一下。
    2017-01-01
  • centos8 安裝 nginx的詳細教程(圖文)

    centos8 安裝 nginx的詳細教程(圖文)

    Nginx是一個web服務(wù)器也可以用來做負載均衡及反向代理使用,目前使用最多的就是負載均衡,這篇文章主要介紹了centos8 安裝 nginx ,需要的朋友可以參考下
    2019-11-11
  • centos 6.9 升級glibc動態(tài)庫的詳細過程

    centos 6.9 升級glibc動態(tài)庫的詳細過程

    glibc是gnu發(fā)布的libc庫,即c運行庫,glibc是linux系統(tǒng)中最底層的api,幾乎其它任何運行庫都會依賴于glibc。這篇文章主要介紹了centos 6.9 升級glibc動態(tài)庫的詳細過程,需要的朋友可以參考下
    2019-11-11
  • ubuntu16.04自動設(shè)置行號的步驟詳解

    ubuntu16.04自動設(shè)置行號的步驟詳解

    這篇文章主要介紹了ubuntu16.04自動設(shè)置行號的步驟,文中給大家提到了Ubuntu vi設(shè)置行號的方法,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-08-08
  • Deepin系統(tǒng)中g(shù)rub配置的說明和修改方式

    Deepin系統(tǒng)中g(shù)rub配置的說明和修改方式

    GRUB是一種多操作系統(tǒng)啟動程序,主配置文件位于/boot/grub/grub.cfg,但通常通過編輯/etc/default/grub文件來修改配置,該文件允許用戶設(shè)置默認啟動操作系統(tǒng)、啟動超時時間等,修改后需運行特定命令更新配置
    2024-09-09
  • CentOS 6/7環(huán)境下通過yum安裝php7的方法

    CentOS 6/7環(huán)境下通過yum安裝php7的方法

    這篇文章主要介紹了CentOS 6/7環(huán)境下通過yum安裝php7的方法,簡單分析了CentOS 6/7服務(wù)器環(huán)境下使用yum安裝php7的相關(guān)命令與操作步驟,需要的朋友可以參考下
    2018-03-03
  • Linux下php連接SQLServer 2000數(shù)據(jù)庫的配置方法

    Linux下php連接SQLServer 2000數(shù)據(jù)庫的配置方法

    Linux服務(wù)器中的php程序能夠連接到Windows服務(wù)器中的SQL Server 2000數(shù)據(jù)庫,這里分享下配置方法,需要的朋友可以參考下
    2013-06-06

最新評論