1

Тема: Selenium залишає за собою зомбі

Є python процес:
- крутиться вічно;
- піднімає кілкька разів selenium (~100 разів в день). Виглядає так:
створили:

        self.driver = webdriver.Chrome(
            executable_path=settings.CHROME_DRIVER_PATH,
            chrome_options=options,
        )

закрили:

            self.driver.close()
            self.driver.quit()

Але в процесах ОС (дебіан) (ps -aux) показує мені купу зомбі:

Прихований текст
root     31354  0.0  0.3 186420 13988 ?        S    00:40   0:00 Xvfb -br -nolisten tcp -screen 0 800x600x24 :1833
root     31482  0.0  0.0      0     0 ?        Z    00:40   0:00 [cat] <defunct>
root     31483  0.0  0.0      0     0 ?        Z    00:40   0:00 [cat] <defunct>
root     31485  0.0  0.0      0     0 ?        Z    00:40   0:00 [chrome] <defunct>
root     31486  0.0  0.0      0     0 ?        Z    00:40   0:00 [nacl_helper] <defunct>
root     31499  0.0  0.0      0     0 ?        Z    00:40   0:01 [chrome] <defunct>
root     31503  0.0  0.0      0     0 ?        Z    00:40   0:00 [chrome] <defunct>
root     31521  0.0  0.0      0     0 ?        ZN   May26   0:00 [chrome] <defunct>
root     31536  0.0  0.0      0     0 ?        ZN   May26   0:00 [chrome] <defunct>
root     31726  0.0  0.0      0     0 ?        ZN   00:40   0:07 [chrome] <defunct>
root     31772  0.0  0.0      0     0 ?        Z    00:40   0:00 [chrome] <defunct>
root     31793  0.0  0.0      0     0 ?        Z    00:40   0:00 [chrome] <defunct>
root     31979  0.0  0.0      0     0 ?        ZN   00:40   0:00 [chrome] <defunct>
root     32080  0.0  0.0      0     0 ?        ZN   00:41   0:00 [chrome] <defunct>
root     32115  0.0  0.3 186332 14556 ?        S    00:41   0:00 Xvfb -br -nolisten tcp -screen 0 800x600x24 :1837
root     32129  0.0  0.0      0     0 ?        Z    00:41   0:00 [cat] <defunct>
root     32130  0.0  0.0      0     0 ?        Z    00:41   0:00 [cat] <defunct>
root     32132  0.0  0.0      0     0 ?        Z    00:41   0:00 [chrome] <defunct>
root     32133  0.0  0.0      0     0 ?        Z    00:41   0:00 [nacl_helper] <defunct>
root     32147  0.0  0.0      0     0 ?        Z    00:41   0:02 [chrome] <defunct>
root     32151  0.0  0.0      0     0 ?        Z    00:41   0:00 [chrome] <defunct>
root     32387  0.0  0.0      0     0 ?        Z    00:41   0:00 [chrome] <defunct>
root     32398  0.0  0.0      0     0 ?        Z    00:41   0:00 [chrome] <defunct>
root     32573  0.0  0.0      0     0 ?        ZN   00:41   0:00 [chrome] <defunct>
root     32721  0.0  0.0      0     0 ?        ZN   00:42   0:00 [chrome] <defunct>
root     32758  0.0  0.3 186400 13980 ?        S    00:42   0:00 Xvfb -br -nolisten tcp -screen 0 800x600x24 :1841

Проста зупинка батьківського процесу python, одразу чистить всі ці [chrome] <defunct> i Xvfb -br -nolisten tcp -screen 0 800x600x24 :1837

Код закриття (close, quit) виконується завжди, бо використвується python with інтерфейс.

Чи реально, що видалити всі ці процеси можна лише з зупинкою батьківського процесу?

2 Востаннє редагувалося koala (27.05.2019 09:53:48)

Re: Selenium залишає за собою зомбі

Це не ваша проблема часом?
https://github.com/seleniumhq/selenium/issues/1094
Там, щоправда, у всіх проблеми із Windows.

Подякували: Q-bart1

3

Re: Selenium залишає за собою зомбі

Так, виглядає так. І що можна зробити?

Там взагалі жодного рішення ніхто не знайшов)

4

Re: Selenium залишає за собою зомбі

Там додали скріпт, який все це прибиває: https://stackoverflow.com/questions/213 … 9#21320949
Його можна смикати, скажімо, раз на добу після чергового запуску.

Подякували: leofun01, Q-bart2

5

Re: Selenium залишає за собою зомбі

Я би спробував запустити Chrome у докер-контейнері:

docker run -d --restart=always -p 4444:4444 -v /dev/shm:/dev/shm --name=selenium-standalone-chrome selenium/standalone-chrome:3.141.59-oxygen

Та підключитись до нього з Python ось таким чином:

self.driver = webdriver.Remote(
    desired_capabilities=webdriver.DesiredCapabilities.CHROME,
    command_executor="http://localhost:4444/wd/hub"
)

Ось тут є інформація про контейнери з Firefox та Chrome:
https://github.com/SeleniumHQ/docker-se … ium-docker

У гіршому випадку, ви зможете перезапускати контейнер однією командою - docker restart selenium-standalone-chrome

Подякували: ping, koala, /KIT\, ReAl, leofun01, Q-bart6

6

Re: Selenium залишає за собою зомбі

Q-bart написав:

Але в процесах ОС (дебіан) (ps -aux) показує мені купу зомбі:

А статусом завершення цих процесів хтось десь цікавився?
Запис про дочірній процес (а не сам процес) висить, поки батьківський процес не поцікавиться статусом завершення (або поки не буде завершений батьківський процес, бо тоді вже нікому цікавитися статусом).

7

Re: Selenium залишає за собою зомбі

Наскільки я пам'ятаю, процес в операційних системах - це якраз і є структура в пам'яті.

8 Востаннє редагувалося ReAl (27.05.2019 19:28:26)

Re: Selenium залишає за собою зомбі

koala написав:

Наскільки я пам'ятаю, процес в операційних системах - це якраз і є структура в пам'яті.

Мав на увазі, що вся пам'ять, всі файлові мапінги процесу звільнюються і не залишається нічого, окрім цієї структури опису процесу з кодом його завершення. ОС не знає, коли може батьківському процесу це знадобитися і тому не викидає, доки не буде опитано.

Подякували: koala, Q-bart2

9

Re: Selenium залишає за собою зомбі

koala написав:

Там додали скріпт, який все це прибиває: https://stackoverflow.com/questions/213 … 9#21320949
Його можна смикати, скажімо, раз на добу після чергового запуску.

 Я дуже вибачаюсь, бо виглядає так, ніби це я сам нічого не можу знайти, але я рілі не можу знайти цей скрипт. kill_chromedriver.bat

В тексті ні посилання, нічого взагалі.

10

Re: Selenium залишає за собою зомбі

ZEN написав:

Я би спробував запустити Chrome у докер-контейнері:

docker run -d --restart=always -p 4444:4444 -v /dev/shm:/dev/shm --name=selenium-standalone-chrome selenium/standalone-chrome:3.141.59-oxygen

Та підключитись до нього з Python ось таким чином:

self.driver = webdriver.Remote(
    desired_capabilities=webdriver.DesiredCapabilities.CHROME,
    command_executor="http://localhost:4444/wd/hub"
)

Ось тут є інформація про контейнери з Firefox та Chrome:
https://github.com/SeleniumHQ/docker-se … ium-docker

У гіршому випадку, ви зможете перезапускати контейнер однією командою - docker restart selenium-standalone-chrome

О, це хороше рішення мабуть. Як щодо ресурсів? Не буде воно жерти задохера ресурсів коли не використовуєьться? 80% часу він вочевидь має просто висіти в пам'яті. Можливо маєте досвід, щоб підказати)?

11

Re: Selenium залишає за собою зомбі

ReAl написав:
koala написав:

Наскільки я пам'ятаю, процес в операційних системах - це якраз і є структура в пам'яті.

Мав на увазі, що вся пам'ять, всі файлові мапінги процесу звільнюються і не залишається нічого, окрім цієї структури опису процесу з кодом його завершення. ОС не знає, коли може батьківському процесу це знадобитися і тому не викидає, доки не буде опитано.

Вочевидь, це - саме мій кейс. Код selenium мав би це опитувати і закривати, вірно?

12

Re: Selenium залишає за собою зомбі

Q-bart написав:
ZEN написав:

Я би спробував запустити Chrome у докер-контейнері:

docker run -d --restart=always -p 4444:4444 -v /dev/shm:/dev/shm --name=selenium-standalone-chrome selenium/standalone-chrome:3.141.59-oxygen

Та підключитись до нього з Python ось таким чином:

self.driver = webdriver.Remote(
    desired_capabilities=webdriver.DesiredCapabilities.CHROME,
    command_executor="http://localhost:4444/wd/hub"
)

Ось тут є інформація про контейнери з Firefox та Chrome:
https://github.com/SeleniumHQ/docker-se … ium-docker

У гіршому випадку, ви зможете перезапускати контейнер однією командою - docker restart selenium-standalone-chrome

О, це хороше рішення мабуть. Як щодо ресурсів? Не буде воно жерти задохера ресурсів коли не використовуєьться? 80% часу він вочевидь має просто висіти в пам'яті. Можливо маєте досвід, щоб підказати)?

Якщо запустити на холодну, то docker stats selenium-standalone-chrome показує ось таку статистику:
https://cdn.scrot.moe/images/2019/05/28/docker_stats_selenium-standalone-chrome.png
Але в мене зараз немає жодного тесту, щоб зібрати статитстики хоча б за годину використання.

Подякували: Q-bart1

13

Re: Selenium залишає за собою зомбі

ZEN написав:

Якщо запустити на холодну, то docker stats selenium-standalone-chrome показує ось таку статистику:
https://cdn.scrot.moe/images/2019/05/28/docker_stats_selenium-standalone-chrome.png
Але в мене зараз немає жодного тесту, щоб зібрати статитстики хоча б за годину використання.

Дякую!

14

Re: Selenium залишає за собою зомбі

Q-bart написав:
ReAl написав:

Мав на увазі, що вся пам'ять, всі файлові мапінги процесу звільнюються і не залишається нічого, окрім цієї структури опису процесу з кодом його завершення. ОС не знає, коли може батьківському процесу це знадобитися і тому не викидає, доки не буде опитано.

Вочевидь, це - саме мій кейс. Код selenium мав би це опитувати і закривати, вірно?

Ну логічно було б по quit() все це робити і повертати код завершення для аналізу.
Алеж видно не робить.

Подякували: Q-bart1