Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Zombie chrome process on middle2 #21

Open
pm5 opened this issue Mar 2, 2020 · 1 comment
Open

Zombie chrome process on middle2 #21

pm5 opened this issue Mar 2, 2020 · 1 comment

Comments

@pm5
Copy link
Contributor

pm5 commented Mar 2, 2020

如果在 middle2 上面跑 python3 fb_handler.py --update --page --max 10 --cpu 1 --site 89 --between 0 應該很快就會發現有 zombie process(我測試的情況)。

要重現這個問題可以這樣做:ssh into middle2 然後執行底下的 python code(可以用 python3 開 REPL 然後 copy paste 進去):

import os
from selenium import webdriveroptions = webdriver.ChromeOptions()
options.headless = True
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")
executable_path = os.getenv("CHROMEDRIVER_BIN")
driver = webdriver.Chrome(executable_path=executable_path, options=options)
driver.quit()

結束後按 ^D 跳出 python,用 ps 查看 process list 應該就會看到 defunct chrome process(還有 cat)。我對 selenium 不太熟,但就我所知上面的 code 應該是正確的關閉邏輯 :thinking_face: 上面的 code 在 macOS 上跑是沒有問題。同樣的 code 在 changhua 和 tainan 都會產生 zombie process。

(用上面的方法測試完以後記得通知 middle2 admin 把 ssh 進去的 node release 掉。)

@pm5
Copy link
Contributor Author

pm5 commented Mar 2, 2020

大概看了一下,目前看到兩個可能的原因:

  1. chromedriver 的問題。有一說是不要加 --no-sandbox 試試看,但是我們要用 headless 好像沒有簡單的方法可以拿掉 --no-sandbox 選項
  2. Docker 的問題。有一個 n 年前的說法是 Docker 要加 --init 它的 PID 1 才會正確地 reap zombie。這個我也不確定現今的情況是怎麼樣

另外我也不確定:tainan 應該也有一樣的問題,只是 tainan 用的 selenium process 相對少很多所以不容易發現,但為什麼 tainan 的 cronjob node 都能自動被 release 而 changhua 的不會?因為,如果 cronjob node 可以跑完就自動被釋放,那我們讓每次 update 的工作少跑一點就可以了。

一個 work around 的方法是減少新開的 chrome process。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant