Myeclipse 是如何启动tomcat服务

闲的蛋疼的时候,就写了个批处理脚本自动重启关闭tomcat 服务的脚本,内容如下:

d:
cd work/apache-tomcat-7.0.78/bin

call shutdown.bat

call startup.bat


因为本身tomcat 下边有项目,没想到启动的时候 居然内存溢出了

我又看了下myeclipse 中关于tomcat7 的配置 ,发现,里面加了VM 参数调优的设置 

Myeclipse 是如何启动tomcat服务_第1张图片

然后我用JAVA自带的工具jconsole 看了下 VM参数 确认了一下 ,(这个程序不要关闭,后续还有用)

Myeclipse 是如何启动tomcat服务_第2张图片

能够看到VM参数里传入的 一些调优的属性信息。

我想,既然myeclipse启动tomcat 的时候传入了调优参数,那么在不修改tomcat 启动程序的前提下,它是如何实现的呢?

从网上了找了一大堆的答案,都是告知如何TOMCAT调优或者JVM调优的,这就不是我想要的答案。

我想要的答案 是 手动实现和myeclipse启动tomcat 一样的效果,既能启动tomcat,又能传入调优参数,还不用改变tomcat 的启动程序,

既然网上找不到答案,索性我就监听mycelipse启动tomcat 的进程

从网上下载ProcessMonitor的软件,打开之后,从mycelipse中启动tomcat,然后用jconsole获取到进程的PID,我本机的是8788,然后设置ProcessMonitor的过滤条件为:

pid is 8788

Myeclipse 是如何启动tomcat服务_第3张图片

点击OK,然后过滤得到进程8788的所有信息

这时候我们看到第一行是Process Start 这就是我们要找的信息,双击它,

Myeclipse 是如何启动tomcat服务_第4张图片

把Command Line 里的内容复制出来,得到的信息如下:

 "D:\work\java\1_7u17\jdk\bin\javaw.exe" -Dmaven.multiModuleProjectDirectory=$M2_HOME "-Dcatalina.home=D:\work\apache-tomcat-7.0.78" "-Dcatalina.base=D:\work\apache-tomcat-7.0.78" "-Djava.endorsed.dirs=D:\work\apache-tomcat-7.0.78/common/endorsed" "-Djava.io.tmpdir=D:\work\apache-tomcat-7.0.78\temp" "-Djava.library.path=D:\work\java\1_7u17\jdk\bin;D:\work\apache-tomcat-7.0.78\bin" -Dsun.io.useCanonCaches=false -Xms1024m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=1024m -XX:MaxPermSize=512m -Djava.awt.headless=true -classpath "D:\work\apache-tomcat-7.0.78/bin/bootstrap.jar;D:\work\apache-tomcat-7.0.78/bin/tomcat-juli.jar;D:\work\java\1_7u17\jdk/lib/tools.jar" org.apache.catalina.startup.Bootstrap start


我们把开头的内容去掉引号,并且 吧javaw.exe改成java.exe,这样文本就会变成如下:

 D:\work\java\1_7u17\jdk\bin\java.exe -Dmaven.multiModuleProjectDirectory=$M2_HOME "-Dcatalina.home=D:\work\apache-tomcat-7.0.78" "-Dcatalina.base=D:\work\apache-tomcat-7.0.78" "-Djava.endorsed.dirs=D:\work\apache-tomcat-7.0.78/common/endorsed" "-Djava.io.tmpdir=D:\work\apache-tomcat-7.0.78\temp" "-Djava.library.path=D:\work\java\1_7u17\jdk\bin;D:\work\apache-tomcat-7.0.78\bin" -Dsun.io.useCanonCaches=false -Xms1024m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=1024m -XX:MaxPermSize=512m -Djava.awt.headless=true -classpath "D:\work\apache-tomcat-7.0.78/bin/bootstrap.jar;D:\work\apache-tomcat-7.0.78/bin/tomcat-juli.jar;D:\work\java\1_7u17\jdk/lib/tools.jar" org.apache.catalina.startup.Bootstrap start


这样的话 是不是 和平时我们在命令行运行java文件很像, java [-options] class [args...]  

然后我们 吧myeclipse 开启的tomcat 关了,在命令行输入以上内容,回车之后会发现和myeclipse启动tomcat控制台输入的内容一样,

然后我们在刚才打开的jconsole的程序里新建链接,

Myeclipse 是如何启动tomcat服务_第5张图片

打开之后 我们比较两个链接的VM 概要,发现VM参数也都传进去了

Myeclipse 是如何启动tomcat服务_第6张图片

由此我们最后得出的结论差不多是这样:

在myeclipse 启动tomcat 的时候,其实并没有去调用tomcat 的startup.bat程序,它只是去运行了tomcat路径下的某个文件org.apache.catalina.startup.Bootstrap,传入了运行参数就是 以'-'开头的那几个属性,传入了程序参数就是字符串“start”,至于这个文件org.apache.catalina.startup.Bootstrap,目前暂时还没有研究tomcat 的源码,所以我这里就不介绍了,有兴趣的可以去网上找找相关的资料或者下载tomcat 的源码看看。

你可能感兴趣的:(工具使用)