Ps

無法刪除執行程序的 Docker 使用者

  • March 28, 2017

我有一些特定使用者使用的資源,我不得不刪除這些資源,因為它從伺服器中佔用了大量資源。當我在伺服器中列出程序時,已刪除的使用者現在顯示為“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的工具,它似乎可以解決我遇到的問題,因為它可以為您提供有關每個容器的特定資訊。就我而言,我看到主機和容器中都發生了程序,因此很難真正檢查正在發生的事情。

引用自:https://unix.stackexchange.com/questions/349870