OpenJDK Hotspot JVM是否利用人体工程学来确定管家线程数(遵守docker pids限制)

时间:2019-03-27 18:35:19

标签: java docker docker-compose jvm jvm-arguments

我可能对这个问题的标题完全不正确,所以最好从观察到的行为入手。

我已经使用docker-compose为基于Java的图像设置了120 PIDS的PID限制。确切地说,adoptopenjdk/openjdk11:jdk-11.0.2.9-alpine-slim

120有点武断,因为我所做的只是使用docker stats查看20个正在运行的图像,并注意到当时它们的PID计数均<100,而我又提供了20作为余量。

此后,我观察到了一些发生此类错误的行为:

  

由以下原因引起:java.lang.OutOfMemoryError:无法创建本机线程:可能内存不足或达到了进程/资源限制

docker stats显示大约80%的内存使用率,例如:

  

使用了301.8MiB / 376MiB 80.26%内存

但至关重要的是120 pids。

我现在想知道几件事:

  1. 我是否将120设置得太低,如果合理,那是合理的-可能在很大程度上取决于我的特定用例,例如线程池大小,并发请求和GC活动等。但是,如果是这种情况,最好的方法是测量-可能测量一两周的PIDS活动,并将其水平设置为略高于最高水平。
  2. JVM是否甚至知道当前已应用的PIDS限制,VM人机工程学甚至可以检测到该限制,并知道VM是否能够创建更多线程或是否存在可以告知它的标志。如果它可以做到这一点,那会从根本上改变任何事情,例如VM对于尝试开始执行诸如GC或JIT或内部整理之类的线程的线程数量会更加保守?

0 个答案:

没有答案