Tomcat调优及JMX监控
Tomcat调优及JMX监控
实验背景
======================================================
系统版本:CentOS release 6.5 (Final)
Tomcat版本: Apache-tomcat-7.0.54
Tomcat介绍:
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是8.0。
======================================================
1
2
|
Tomcat 7最新版本下载链接: http: //mirrors .cnnic.cn /apache/tomcat/tomcat-7/v7 .0.56 /bin/apache-tomcat-7 .0.56. tar .gz |
1
2
|
Tomcat 安装: tar zxvf apache-tomcat-7.0.54. tar .gz -C /opt/ |
1
2
3
4
5
6
7
8
|
jsvc编译及调优: cd apache-tomcat-7.0.54 /bin tar zxvf commons-daemon-native. tar .gz cd commons-daemon-1.0.x-native-src /unix . /configure make -j4 cp jsvc ../../ cd ../../ |
1
2
|
添加tomcat用户,后面用来启动tomcat进程: useradd -s /sbin/nologin tomcat |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
jsvc help文件: # export JAVA_HOME=/opt/jdk1.7.0_60/ # ./jsvc --help Usage: jsvc [-options] class [args...] Where options include: -help | --help | -? show this help page (implies -nodetach) -jvm <JVM name> use a specific Java Virtual Machine. Available JVMs: 'server' -client use a client Java Virtual Machine. -server use a server Java Virtual Machine. - cp | -classpath <directories and zip /jar files> set search path for service classes and resouces -java-home | -home <directory> set the path of your JDK or JRE installation (or set the JAVA_HOME environment variable) -version show the current Java environment version (to check correctness of -home and -jvm. Implies -nodetach) -showversion show the current Java environment version (to check correctness of -home and -jvm) and continue execution. -nodetach don't detach from parent process and become a daemon -debug verbosely print debugging information -check only check service (implies -nodetach) -user <user> user used to run the daemon (defaults to current user) -verbose[:class|gc|jni] enable verbose output -cwd < /full/path > set working directory to given location (defaults to /) -outfile < /full/path/to/file > Location for output from stdout (defaults to /dev/null ) Use the value '&2' to simulate '1>&2' -errfile < /full/path/to/file > Location for output from stderr (defaults to /dev/null ) Use the value '&1' to simulate '2>&1' -pidfile < /full/path/to/file > Location for output from the file containing the pid of jsvc (defaults to /var/run/jsvc .pid) -D<name>=<value> set a Java system property -X<option> set Virtual Machine specific option -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] enable assertions -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] disable assertions -esa | -enablesystemassertions enable system assertions -dsa | -disablesystemassertions disable system assertions -agentlib:<libname>[=<options>] load native agent library <libname>, e.g. -agentlib:hprof -agentpath:<pathname>[=<options>] load native agent library by full pathname -javaagent:<jarpath>[=<options>] load Java programming language agent, see java.lang.instrument -procname <procname> use the specified process name -wait <waittime> wait waittime seconds for the service to start waittime should multiple of 10 (min=10) -stop stop the service using the file given in the -pidfile option -keepstdin does not redirect stdin to /dev/null jsvc (Apache Commons Daemon) 1.0.15-dev Copyright (c) 1999-2013 Apache Software Foundation. |
=============================================================
接下来是重点了!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
jsvc 调优参数: export PATH= /bin : /sbin : /usr/bin : /usr/sbin export JAVA_HOME= /opt/jdk1 .7.0_60 export JRE_HOME= /opt/jdk1 .7.0_60 /jre export CATALINA_BASE= /opt/apache-tomcat-7 .0.54 export CATALINA_HOME= /opt/apache-tomcat-7 .0.54 export CATALINA_PID=$CATALINA_BASE /logs/catalina-daemon .pid export CATALINA_TMP=$CATALINA_BASE /temp export TOMCAT_USER=tomcat export CATALINA_OPTS="-server -Xss512k -Xms2048M -Xmx2048M -XX:MaxPermSize=256M -XX:PermSize=128M -XX:NewSize=128M -XX:+CMSIncreme ntalMode -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ParallelGCThreads=8 -Djavax.servlet.r equest.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -Dfile.encoding=UTF-8 -Duser.timezone=Asia /Shanghai -Dcom.sun.manage ment.jmxremote -Dcom.sun.management.jmxremote.port=100861 -Dcom.sun.management.jmxremote.ssl= false -Dcom.sun.management.jmxremote.a uthenticate= false -Djava.rmi.server. hostname =192.168.3.5" |
1
2
|
-XX:+CMSIncrementalMode 该标志将开启CMS收集器的增量模式。增量模式经常暂停CMS过程,以便对应用程序线程作出完全的让步。因此,收集器将花更长的时间完成整个收集周期。因此,只有通过测试后发现正常CMS周期对应用程序线程干扰太大时,才应该使用增量模式。由于现代服务器有足够的处理器来适应并发的垃圾收集,所以这种情况发生得很少。 |
1
2
3
|
-XX:CMSInitiatingOccupancyFraction 当堆满之后,并行收集器便开始进行垃圾收集,例如,当没有足够的空间来容纳新分配或提升的对象。对于CMS收集器,长时间等待是不可取的,因为在并发垃圾收集期间应用持续在运行(并且分配对象)。因此,为了在应用程序使用完内存之前完成垃圾收集周期,CMS收集器要比并行收集器更先启动。 因为不同的应用会有不同对象分配模式,JVM会收集实际的对象分配(和释放)的运行时数据,并且分析这些数据,来决定什么时候启动一次CMS垃圾收集周期。为了引导这一过程, JVM会在一开始执行CMS周期前作一些线索查找。该线索由 -XX:CMSInitiatingOccupancyFraction=<value>来设置,该值代表老年代堆空间的使用率。比如,value=75意味着第一次CMS垃圾收集会在老年代被占用75%时被触发。通常CMSInitiatingOccupancyFraction的默认值为68(之前很长时间的经历来决定的)。 |
1
2
|
-XX:+UseConcMarkSweepGC 该标志首先是激活CMS收集器。默认HotSpot JVM使用的是并行收集器。 |
1
2
3
|
-XX:UseParNewGC 当使用CMS收集器时,该标志激活年轻代使用多线程并行执行垃圾回收。这令人很惊讶,我们不能简单在并行收集器中重用-XX:UserParNewGC标志,因为概念上年轻代用的算法是一样的。然而,对于CMS收集器,年轻代GC算法和老年代GC算法是不同的,因此年轻代GC有两种不同的实现,并且是两个不同的标志。 注意最新的JVM版本,当使用-XX:+UseConcMarkSweepGC时,-XX:UseParNewGC会自动开启。因此,如果年轻代的并行GC不想开启,可以通过设置-XX:-UseParNewGC来关掉。 |
1
2
3
4
|
XX:ConcGCThreads 标志-XX:ConcGCThreads=<value>(早期JVM版本也叫-XX:ParallelCMSThreads)定义并发CMS过程运行时的线程数。比如value=4意味着CMS周期的所有阶段都以4个线程来执行。尽管更多的线程会加快并发CMS过程,但其也会带来额外的同步开销。因此,对于特定的应用程序,应该通过测试来判断增加CMS线程数是否真的能够带来性能的提升。 如果还标志未设置,JVM会根据并行收集器中的-XX:ParallelGCThreads参数的值来计算出默认的并行CMS线程数。该公式是ConcGCThreads = (ParallelGCThreads + 3) /4 。因此,对于CMS收集器, -XX:ParallelGCThreads标志不仅影响“stop-the-world”垃圾收集阶段,还影响并发阶段。 总之,有不少方法可以配置CMS收集器的多线程执行。正是由于这个原因,建议第一次运行CMS收集器时使用其默认设置, 然后如果需要调优再进行测试。只有在生产系统中测量(或类生产测试系统)发现应用程序的暂停时间的目标没有达到 , 就可以通过这些标志应该进行GC调优。 |
1
|
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。 |
1
2
3
4
5
6
7
|
接下来这些参数 是针对于 JMX 远程监控的: -Dcom.sun.management.jmxremote 启用JMX远程监控 -Dcom.sun.management.jmxremote.port=100861 使用端口100861 -Dcom.sun.management.jmxremote.authenticate= false 远程连接不需要密码认证 -Dcom.sun.management.jmxremote.ssl= false 不使用SSL -Dcom.sun.management.jmxremote.access. file =$CATALINA_HOME /conf/jmxremote .access 使用指定的JMX帐号授权文件 -Dcom.sun.management.jmxremote.password. file =$CATALINA_HOME /conf/jmxremote .password 使用指定的JMX帐号文件 |
=============================================================
到这里为止 tomcat 针对jsvc 调优已经差不多了,下面启动tomcat 测试:
1
2
3
|
# cp ./daemon.sh /etc/init.d/tomcat # chmod +x /etc/init.d/tomcat # /etc/init.d/tomcat start |
1
2
3
|
# ps -ef |grep tomcat root 12166 1 0 16:09 ? 00:00:00 jsvc. exec -java-home /opt/jdk1 .7.0_60 -user tomcat -pidfile /opt/apache-tomcat-7 .0.54 /logs/catalina-daemon .pid -wait 10 -outfile /opt/apache-tomcat-7 .0.54 /logs/catalina-daemon .out -errfile &1 -classpath /opt/apache-tomcat-7 .0.54 /bin/bootstrap .jar: /opt/apache-tomcat-7 .0.54 /bin/commons-daemon .jar: /opt/apache-tomcat-7 .0.54 /bin/tomcat-juli .jar -Djava.util.logging.config. file = /opt/apache-tomcat-7 .0.54 /conf/logging .properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xss512k -Xms2048M -Xmx2048M -XX:MaxPermSize=256M -XX:PermSize=128M -XX:NewSize=128M -XX:+CMSIncrementalMode -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ParallelGCThreads=8 -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -Dfile.encoding=UTF-8 -Duser.timezone=Asia /Shanghai -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10086 -Dcom.sun.management.jmxremote.ssl= false -Dcom.sun.management.jmxremote.authenticate= false -Djava.rmi.server. hostname =192.168.3.5 -Djava.endorsed. dirs = -Dcatalina.base= /opt/apache-tomcat-7 .0.54 -Dcatalina.home= /opt/apache-tomcat-7 .0.54 -Djava.io.tmpdir= /opt/apache-tomcat-7 .0.54 /temp org.apache.catalina.startup.Bootstrap tomcat 12167 12166 34 16:09 ? 00:00:05 jsvc. exec -java-home /opt/jdk1 .7.0_60 -user tomcat -pidfile /opt/apache-tomcat-7 .0.54 /logs/catalina-daemon .pid -wait 10 -outfile /opt/apache-tomcat-7 .0.54 /logs/catalina-daemon .out -errfile &1 -classpath /opt/apache-tomcat-7 .0.54 /bin/bootstrap .jar: /opt/apache-tomcat-7 .0.54 /bin/commons-daemon .jar: /opt/apache-tomcat-7 .0.54 /bin/tomcat-juli .jar -Djava.util.logging.config. file = /opt/apache-tomcat-7 .0.54 /conf/logging .properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xss512k -Xms2048M -Xmx2048M -XX:MaxPermSize=256M -XX:PermSize=128M -XX:NewSize=128M -XX:+CMSIncrementalMode -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ParallelGCThreads=8 -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -Dfile.encoding=UTF-8 -Duser.timezone=Asia /Shanghai -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10086 -Dcom.sun.management.jmxremote.ssl= false -Dcom.sun.management.jmxremote.authenticate= false -Djava.rmi.server. hostname =192.168.3.5 -Djava.endorsed. dirs = -Dcatalina.base= /opt/apache-tomcat-7 .0.54 -Dcatalina.home= /opt/apache-tomcat-7 .0.54 -Djava.io.tmpdir= /opt/apache-tomcat-7 .0.54 /temp org.apache.catalina.startup.Bootstrap |
1
2
3
4
5
6
7
8
|
如果你的系统开起了iptables的话,这里需要开放针对jmx 和 tomcat 的端口: vim /etc/sysconfig/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 10086 -j ACCEPT /etc/init .d /iptables restart 重启防火墙生效; |
1
2
|
接下来打开浏览器测试tomcat是否已经work; http: //192 .168.3.5:8080 |
=============================================================
这里我们验证一下JMX远程监控,推荐使用VisualVM监控;
JDK中还藏着一个宝贝,它的名字叫做VisualVM。VisualVM是Sun的一个OpenJDK项目,其目的在于为Java应用创建一个整套的问题解决工具;
1
2
|
官网主页: http: //visualvm .java.net/ |
步骤如下:
1)添加远程主机:
2)添加jmx连接:
这里需要注意格式:主机+端口 ,另外下面勾选 不要求SSL连接;
3)添加完成之后打开查看tomcat 资源使用情况;
添加成功之后下面有个jmx的主机连接:
打开即可!
So Next ,Enjoy it!
下面是一个优化后的tomcat启动脚本的范例,可以放置在/etc/init.d/下 使用, start 、 stop等进行启动 、关闭操作;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
|
#!/bin/sh # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # ----------------------------------------------------------------------------- # Scripts for tomcat based on jsvc # ----------------------------------------------------------------------------- # # resolve links - $0 may be a softlink export PATH= /bin : /sbin : /usr/bin : /usr/sbin export JAVA_HOME= /opt/jdk1 .7.0_60 export JRE_HOME= /opt/jdk1 .7.0_60 /jre export CATALINA_BASE= /opt/apache-tomcat-7 .0.54 export CATALINA_HOME= /opt/apache-tomcat-7 .0.54 export CATALINA_PID=$CATALINA_BASE /logs/catalina-daemon .pid export CATALINA_TMP=$CATALINA_BASE /temp export TOMCAT_USER=tomcat export CATALINA_OPTS= "-server -Xss512k -Xms2048M -Xmx2048M -XX:MaxPermSize=256M -XX:PermSize=128M -XX:NewSize=128M -XX:+CMSIncrementalMode -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ParallelGCThreads=8 -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Shanghai -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=22222 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.3.5" ARG0= "$0" while [ -h "$ARG0" ]; do ls =` ls -ld "$ARG0" ` link=` expr "$ls" : '.*-> \(.*\)$' ` if expr "$link" : '/.*' > /dev/null ; then ARG0= "$link" else ARG0= "`dirname $ARG0`/$link" fi done DIRNAME= "`dirname $ARG0`" PROGRAM= "`basename $ARG0`" while [ ".$1" != . ] do case "$1" in --java-home ) JAVA_HOME= "$2" shift ; shift ; continue ;; --catalina-home ) CATALINA_HOME= "$2" shift ; shift ; continue ;; --catalina-base ) CATALINA_BASE= "$2" shift ; shift ; continue ;; --catalina-pid ) CATALINA_PID= "$2" shift ; shift ; continue ;; --tomcat-user ) TOMCAT_USER= "$2" shift ; shift ; continue ;; * ) break ;; esac done # OS specific support (must be 'true' or 'false'). cygwin= false ; darwin= false ; case "`uname`" in CYGWIN*) cygwin= true ;; Darwin*) darwin= true ;; esac # Use the maximum available, or set MAX_FD != -1 to use that test ".$MAX_FD" = . && MAX_FD= "maximum" # Setup parameters for running the jsvc # test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat # Set JAVA_HOME to working JDK or JRE # JAVA_HOME=/opt/jdk-1.6.0.22 # If not set we'll try to guess the JAVA_HOME # from java binary if on the PATH # if [ -z "$JAVA_HOME" ]; then JAVA_BIN= "`which java 2>/dev/null || type java 2>&1`" test -x "$JAVA_BIN" && JAVA_HOME= "`dirname $JAVA_BIN`" test ".$JAVA_HOME" != . && JAVA_HOME=` cd "$JAVA_HOME/.." > /dev/null ; pwd ` else JAVA_BIN= "$JAVA_HOME/bin/java" fi # Only set CATALINA_HOME if not already set test ".$CATALINA_HOME" = . && CATALINA_HOME=` cd "$DIRNAME/.." > /dev/null ; pwd ` test ".$CATALINA_BASE" = . && CATALINA_BASE= "$CATALINA_HOME" test ".$CATALINA_MAIN" = . && CATALINA_MAIN=org.apache.catalina.startup.Bootstrap # If not explicitly set, look for jsvc in CATALINA_BASE first then CATALINA_HOME if [ -z $JSVC ]; then JSVC= "$CATALINA_BASE/bin/jsvc" if [ ! -x $JSVC ]; then JSVC= "$CATALINA_HOME/bin/jsvc" fi fi # Set the default service-start wait time if necessary test ".$SERVICE_START_WAIT_TIME" = . && SERVICE_START_WAIT_TIME=10 # Ensure that any user defined CLASSPATH variables are not used on startup, # but allow them to be specified in setenv.sh, in rare case when it is needed. CLASSPATH= JAVA_OPTS= if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then . "$CATALINA_BASE/bin/setenv.sh" elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then . "$CATALINA_HOME/bin/setenv.sh" fi # Add on extra jar files to CLASSPATH test ".$CLASSPATH" != . && CLASSPATH= "${CLASSPATH}:" CLASSPATH= "$CLASSPATH$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/commons-daemon.jar" test ".$CATALINA_OUT" = . && CATALINA_OUT= "$CATALINA_BASE/logs/catalina-daemon.out" test ".$CATALINA_TMP" = . && CATALINA_TMP= "$CATALINA_BASE/temp" # Add tomcat-juli.jar to classpath # tomcat-juli.jar can be over-ridden per instance if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then CLASSPATH= "$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar" else CLASSPATH= "$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar" fi # Set juli LogManager config file if it is present and an override has not been issued if [ -z "$LOGGING_CONFIG" ]; then if [ -r "$CATALINA_BASE/conf/logging.properties" ]; then LOGGING_CONFIG= "-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties" else # Bugzilla 45585 LOGGING_CONFIG= "-Dnop" fi fi test ".$LOGGING_MANAGER" = . && LOGGING_MANAGER= "-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" JAVA_OPTS= "$JAVA_OPTS $LOGGING_MANAGER" # Set -pidfile test ".$CATALINA_PID" = . && CATALINA_PID= "$CATALINA_BASE/logs/catalina-daemon.pid" # Increase the maximum file descriptors if we can if [ "$cygwin" = "false" ]; then MAX_FD_LIMIT=` ulimit -H -n` if [ "$?" - eq 0 ]; then # Darwin does not allow RLIMIT_INFINITY on file soft limit if [ "$darwin" = "true" -a "$MAX_FD_LIMIT" = "unlimited" ]; then MAX_FD_LIMIT=` /usr/sbin/sysctl -n kern.maxfilesperproc` fi test ".$MAX_FD" = ".maximum" && MAX_FD= "$MAX_FD_LIMIT" ulimit -n $MAX_FD if [ "$?" - ne 0 ]; then echo "$PROGRAM: Could not set maximum file descriptor limit: $MAX_FD" fi else echo "$PROGRAM: Could not query system maximum file descriptor limit: $MAX_FD_LIMIT" fi fi # ----- Execute The Requested Command ----------------------------------------- case "$1" in run ) shift "$JSVC" $* \ $JSVC_OPTS \ -java-home "$JAVA_HOME" \ -pidfile "$CATALINA_PID" \ -wait 10 \ -nodetach \ -outfile "&1" \ -errfile "&2" \ -classpath "$CLASSPATH" \ "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed. dirs = "$JAVA_ENDORSED_DIRS" \ -Dcatalina.base= "$CATALINA_BASE" \ -Dcatalina.home= "$CATALINA_HOME" \ -Djava.io.tmpdir= "$CATALINA_TMP" \ $CATALINA_MAIN exit $? ;; start ) "$JSVC" $JSVC_OPTS \ -java-home "$JAVA_HOME" \ -user $TOMCAT_USER \ -pidfile "$CATALINA_PID" \ -wait 10 \ -outfile "$CATALINA_OUT" \ -errfile "&1" \ -classpath "$CLASSPATH" \ "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed. dirs = "$JAVA_ENDORSED_DIRS" \ -Dcatalina.base= "$CATALINA_BASE" \ -Dcatalina.home= "$CATALINA_HOME" \ -Djava.io.tmpdir= "$CATALINA_TMP" \ $CATALINA_MAIN exit $? ;; stop ) "$JSVC" $JSVC_OPTS \ -stop \ -pidfile "$CATALINA_PID" \ -classpath "$CLASSPATH" \ -Djava.endorsed. dirs = "$JAVA_ENDORSED_DIRS" \ -Dcatalina.base= "$CATALINA_BASE" \ -Dcatalina.home= "$CATALINA_HOME" \ -Djava.io.tmpdir= "$CATALINA_TMP" \ $CATALINA_MAIN exit $? ;; version ) "$JSVC" \ -java-home "$JAVA_HOME" \ -pidfile "$CATALINA_PID" \ -classpath "$CLASSPATH" \ -errfile "&2" \ -version \ -check \ $CATALINA_MAIN if [ "$?" = 0 ]; then "$JAVA_BIN" \ -classpath "$CATALINA_HOME/lib/catalina.jar" \ org.apache.catalina.util.ServerInfo fi exit $? ;; * ) echo "Unknown command: \`$1'" echo "Usage: $PROGRAM ( commands ... )" echo "commands:" echo " run Start Tomcat without detaching from console" echo " start Start Tomcat" echo " stop Stop Tomcat" echo " version What version of commons daemon and Tomcat" echo " are you running?" exit 1 ;; esac |
=============================================================
1
2
3
4
5
|
参考资料: http: //tomcat .apache.org /tomcat-7 .0-doc /setup .html #Unix_daemon http: //tomcat .apache.org /tomcat-7 .0-doc /RUNNING .txt https: //svn .apache.org /repos/asf/tomcat/tc7 .0.x /trunk/bin/daemon .sh http: //ifeve .com /useful-jvm-flags-part-7-cms-collector/ |
=========================================================
Tomcat调优及JMX监控的更多相关文章
- Tomcat负载均衡、调优核心应用进阶学习笔记(五):Tomcat调优和Tomcat监控(差评)
文章目录 tomcat调优 tomcat监控 tomcat调优 vi catalina.sh # --------------------------------------------------- ...
- Tomcat调优
问题定位 对于Tomcat的处理耗时较长的问题主要有当时的并发量.session数.内存及内存的回收等几个方面造成的.出现问题之后就要进行分析了. 1.关于Tomcat的session数目 这个可以直 ...
- (转)Tomcat调优
问题定位 对于Tomcat的处理耗时较长的问题主要有当时的并发量.session数.内存及内存的回收等几个方面造成的.出现问题之后就要进行分析了. 1.关于Tomcat的session数目 这个可以直 ...
- Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化)
Tomcat自身的调优是针对conf/server.xml中的几个参数的调优设置.首先是对这几个参数的含义要有深刻而清楚的理解.以tomcat8.5为例,讲解参数. 同时也得认识到一点,tomcat调 ...
- 简谈Tomcat调优
一.Tomcat和apache的比较 共同点:apache和tomcat都是属于web服务器. 不同点:他们是两个不同的容器,承载的东西不一样,tomcat属于一种java应用的服务 器,只针对jav ...
- Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog
前两天看到一群里在讨论 Tomcat 参数调优,看到不止一个人说通过 accept-count 来配置线程池大小,我笑了笑,看来其实很多人并不太了解我们用的最多的 WebServer Tomcat,这 ...
- tomcat调优的几个方面(转)
tomcat调优的几个方面 和早期版本相比最新的Tomcat提供更好的性能和稳定性.所以一直使用最新的Tomcat版本.现在本文使用下面几步来提高Tomcat服务器的性能. 增加JVM堆内存大小 修复 ...
- tomcat 调优-生产环境必备
目录 1. tomcat 启动慢 1.1 tomcat 获取随机值阻塞 1.2 tomcat 需要部署的web应用程序太多 1.3 tomcat启动内存不足 2 Connector 调优 2.2 Co ...
- Tomcat 调优技巧
Tomcat 调优技巧:1.Tomcat自身调优: ①采用动静分离节约Tomcat的性能: ②调整Tomcat的线程池: ③调整Tomcat的连接器: ④修改Tomcat的运行模式: ⑤禁用AJP连接 ...
随机推荐
- WEB应用的组成结构
- 通过监听键盘,实现对UITextView的内容移动
视图出现时,增加观察 - (void)viewWillAppear:(BOOL)animated { // 增加对键盘的监听 [[NSNotificationCenter defaultCenter] ...
- Linux Shell 脚本调试
方法如下所示:(1) 使用选项–x,启用shell脚本的跟踪调试功能: $ bash -x script.sh 运行带有-x标志的脚本可以打印出所执行的每一行命令以及当前状态.注意,你也可以使用sh ...
- [转]Android Studio 里搭建自动化测试框架Robotium
Android的自动化测试框架可选择的不多,后来选了Robotium(https://code.google.com/p/robotium/),它的语法及易用性挺像我们用在iOS里的KIF. 官方文档 ...
- display:none与visible:hidden的区别
display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就 ...
- 格式化input输入内容(金额)
项目中要用到格式化金额输入框,要求每三个数字用逗号分割开. 添加一个directive angular.module('myApp.directives', []) .directive('filte ...
- 字符串、数组方法实战--charAt(),split(),indexOf(),substring()
这篇随笔根据两个面试题来实战一下数组.字符串的一些方法. 题一:一个字符串中找出出现次数最多的字符次数 var str = 'fuuhuhuhufaihuhfnkjNKCNIO'; function ...
- python Django 进阶篇
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- SQL执行效率2-执行计划
以下语句可以进行SQL 语句执行时间分析,两个Go之间就是SQL查询语句 use Work--数据库名 go set statistics profile on set statistics io o ...
- redis主从复制配置
master配置 主要是下面配置 # ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the # intern ...