我正在使用docker-compose运行应用程序。
容器之一是selenium/standalone-chrome
图片。我给的是shm_size
的2克。
没有高负载时,应用程序运行正常。但是,我注意到,只要有对硒容器的并发请求(在8核计算机上有9个并发请求),硒都会静默失败。它只是死而死。后续请求未处理。日志中没有任何内容。最后一条消息是:
17:41:00.083 INFO [RemoteSession$Factory.lambda$performHandshake$0] - Started new session 5da2cd57f4e8e4f80b907564d7352051 (org.openqa.selenium.chrome.ChromeDriverService)
我正在同时使用docker stats
和top
监视RAM和CPU使用情况。 Ram很好..大约使用了50%。使用free -m
可以显示大约500m的共享内存。大多数情况下,8个内核承担的负载保持在80%左右。但是,每当最后一个请求到达时,这些过程就会消失。 CPU使用率下降。共享内存似乎没有被释放。
为了使其再次起作用,我必须重新启动该应用程序。否则,将不会接收或记录任何后续请求。
我怀疑容器上的操作系统可能会给我带来某种限制,一旦它们开始消耗资源,操作系统就会杀死它们,但是公平地说,我不知道发生了什么。
任何帮助将不胜感激。
谢谢!
更新:
这是我的docker-compose参考文件
selenium-chrome:
image: selenium/standalone-chrome
privileged: true
shm_size: 2g
expose:
- "4444"
我还测试了不同的图像。这些屏幕截图实际上带有图像selenium/standalone-chrome:3.141.59-gold
。
让我更加困惑的最后一件事-我正在使用selenium来截屏,如果过程失败,我会在java代码中添加webhook调用。如果硒进程终止,我希望它会触发,但是,似乎Java并不认为硒连接已死,并且一直等到我docker-compose down
为止。然后,将触发来自Webhook的所有消息。
Update2: 这是我尝试过的,到目前为止,我已经知道:
1. chrome driver version makes no difference
2. shm_size increase does not make any difference
3. jvm memory limit makes no difference - command: ["java", "-Xmx2048m", "-jar", "/opt/selenium/selenium-server-standalone.jar"]
4. always hangs on the same spot .. 8 concurrent processes on a 8 core machine
5. once dead, stays dead
6. lots of chrome processes hang there - ps -aux | grep chrome
6.1 if those processes are killed - sudo kill -9 $(ps aux | grep 'chrome' | awk '{print $2}'), the process does not start again and stays dead.
7. --no-sandbox option does not help
8. the java process is alive on the host - telnet ip 4444 -> connects succesfully
答案 0 :(得分:1)
我怀疑您的selenium/standalone-chrome
是使用Java
技术实现的。
并且容器的JVM具有一个带有JVM参数-Xmx2048m
或类似值的有限最大内存。
研究selenium
JVM设置/配置文件。
可能发生的是一个或多个选项:
容器应用程序因内存不足而崩溃,因为已达到其内存限制。解决方案:减少绑定的JVM最大内存以匹配容器的最大内存绑定(可能为2048m> 2g)。
JVM应用程序因内存不足而崩溃。解决方案:增加绑定的JVM最大内存以匹配容器的最大内存绑定(可能2048m不足以完成任务)。
容器暂时达到其CPU利用率极限并崩溃。我假设selenium
实现了大规模并行处理(检查其配置)。解决方案:为容器提供更多计算能力,或降低 selenium
并行功能。
请注意,定期资源监视工具无法识别峰值资源压力。如果高峰是短暂而尖锐的。因此,如果资源压力逐渐增加,您可以确定转折点。