Ps
無法刪除執行程序的 Docker 使用者
我有一些特定使用者使用的資源,我不得不刪除這些資源,因為它從伺服器中佔用了大量資源。當我在伺服器中列出程序時,已刪除的使用者現在顯示為“1001”,而不是在我刪除它之前顯示的名稱。
%Cpu(s): 19.8 us, 29.5 sy, 0.0 ni, 50.7 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem : 3882456 total, 183568 free, 2003808 used, 1695080 buff/cache KiB Swap: 1679356 total, 1155300 free, 524056 used. 1463480 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9192 1001 20 0 2068436 74700 10284 S 0.3 1.9 3:02.86 node
通過使用
systemctl status
,我發現使用者正在執行的程序和 docker 容器 ID 位於:├─docker │ ├─42b40e73687acb7fcd9a0e43372ced7588b5568c942f740d06510ab0e85b1462 │ │ ├─17156 /bin/sh -e /usr/local/sbin/start.sh └─11148 node --debug --nolazy dist-release/server
因此,我進入容器並查看 start.sh 文件,但它只是一個執行檔,文件內部沒有指示使用者在執行檔內部被呼叫。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES apiassets_1 42b40e73687a local.io/api-statements:development "start.sh" 21 hours ago Up 18 hours 0.0.0.0:32785->3000/tcp, 0.0.0.0:5966->5858/tcp
我想要做的是阻止這個使用者使用這些資源,所以我很好奇我怎麼能找到這個使用者如何呼叫這個腳本來停止它,或者我怎麼能停止它。
僅適用於關注我的問題的任何人。發生的事情有點奇怪,但是執行該程序的使用者恰好在 docker 容器內具有與主機相同的 ID,因此當我列出所有程序時,容器內使用者的使用者 ID 正在獲取映射到我在主機中的特定使用者。這就解釋了為什麼當我刪除主機中的使用者時,我仍然看到該程序以“1001”執行。
所以,現在我很清楚它應該是這樣工作的。
如果有人感興趣,我還查看了這個名為csysdig的工具,它似乎可以解決我遇到的問題,因為它可以為您提供有關每個容器的特定資訊。就我而言,我看到主機和容器中都發生了程序,因此很難真正檢查正在發生的事情。