为什么Tomcat为我的应用程序打开了如此多的Java进程?

con*_*ile 2 java grails spring tomcat jvm

我有一个Grails 2.2.4应用程序,它被打包为war并在ubuntu 12.04 LTS 64位,8GB RAM上部署到我的tomcat7服务器.

我的setenv.sh文件包含以下内容:

CATALINA_OPTS="
-server 
-Xms1G 
-Xmx2G
-XX:MaxPermSize=512m";
Run Code Online (Sandbox Code Playgroud)

我使用htop来获取正在运行的进程数.我发现我的系统上有超过20个正在运行的java进程.

20多个流程的每个流程如下所示:

PRI NI VIRT   RES    SHR S  CPU% MEM* TIME+    Command 
20   0 6028M 1290M 11140 S  0.0 16.2  0:01.21 /usr/lib/jvm/java-7-oracle/bin/java -Djava.util.logging.config.file
Run Code Online (Sandbox Code Playgroud)

当我使用./bin/startup.sh统计tomcat时,我的应用程序启动时没有错误.当我使用不同的浏览器访问我的应用程序时,我运行了20多个Java进程.我运行的唯一其他Java进程是elasticsearch.

  1. 为什么tomcat为我的应用程序启动了这么多进程?
  2. 我必须限制它们吗?如果是这样的话?

Ste*_*n C 13

你可能看到的是线程不是进程.根据man htop您可以使用该H命令以交互方式隐藏用户线程.

为了记录,Tomcat将创建许多工作线程来处理传入的HTTP请求.如果您(真的)需要控制工作线程的数量,那么有Tomcat配置选项可以做到这一点.