Tomcat监控

Tomcat监控
1、(CMS垃圾回收算法)CMS执行过程可以分成:初始标记,并发标记,并发预处理,重标记,并发清理,重置六个阶段
监控指标:

  1. Free Memory 剩余内存
  2. Total Memory 总内存
  3. Max Memory 最大内存
  4. Max Threads 最大线程数
  5. Current thread count 当前线程数
  6. Current thread count 当前繁忙线程数
  7. Max processing time 最大CPU处理时间
  8. Ms processing time 最短处理时间
  9. Request count 请求数
  10. Error count 错误数
  11. Bytes received 接收字节
  12. bytes send 发送字节

二、内存泄露和内存溢出
1、内存溢出:运行一个应用程序需要4g内存,项目只支持3g内存 溢出
2、内存泄露:程序中定义很多静态变量,但是垃圾回收机制不会进行回收,这个对象没有被引用,再次申请内存,会报错泄露。

Tomcat调优
修改catalina.sh
JAVA_OPTS=’-Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m’
1、修改Tomcat的启动方式,Tomcat默认启动方式为: java -client,修改为:export JAVA_OPTS="-server" 以支持更多的并发(必须是第一个参数)
2、把进程模式修改为异步模式(在设置端口的地方的后面增加 protocol=“org.apache.coyote.http11.Http11NioProtocol”)
3、-Xloggc:gc.log -XX:+PrintGCDetails 设置打印GC日志
4、-XX:+UseConcMarkSweepGC 选用CMS作为垃圾回收方法
5、-XX:+ExplicitGCInvokesConcurrent 用这个替换了DisableExplicitGC,每次遇到system.gc时调用一次CMS回收,并不是直接Stop-the-world
6、-XX:+UseCMSCompactAtFullCollection 在每次CMS收集器在完成垃圾回收之后做一次内存碎片整理
7、-Xmx、-Xms 这两个参数用于配置 heap 的起始大小和最大值。这里需要经过观察,找一个合适的值,设置太大会导致内存浪费,
同时也会导致垃圾回收耗时太长。对于 Tomcat 来说,一般都会将初始值和最大值设置为相同值,这样就避免在初始内存不足时触发 Full GC 来进行扩展内存。
设定 heap 大小之后,要根据对象生命周期的特征,来调整新生代与老年代的大小比例
涉及的参数有:
-XX:NewSize
-XX:NewRatio
-XX:MaxNewSize
-Xmn
第一个是直接设置新生代初始大小,第二个是设置比例(Ratio)。太高或太低都会导致 GC 不能高效的工作。毕竟 Minor GC 也是要耗时的。
最后一个设置新生代的初始值和最大值相同,堆空间的变化不影响其值
对于使用了大量第三方类库的应用来说,会加载许多框架依赖的类,使用过程中可能会遇到因为Perm Gen 不足产生的 OOM,
这种情况可以通过观察稳定状态下 Perm 区的占用,再通过参数设置。
-XX:PermSize
-XX:MaxPermSize
-XX:MaxMetaspaceSize
第一个会设置Perm区的初始大小,第二个用于设置Perm区的最大值。在Java 8的时候, Perm 区被移除,改为Metaspace,不过如果遇到类似的OOM,依然可以调整其大小
此外,对于使用大量线程的应用,也可以配置 -Xss,主要用于设置单个线程的stack 大小。注意,是单个的大小,因此设置值越大,会占用越大,可用的线程数也就越少
这里的配置一般对于-X开始的可以直接在后面用数字加单位,而-XX的则需要等号后数字再加单位,例如:
java -Xms100m -Xmx200m -XX:PermSize=300m
这里数字后的单可以是m,g,k代表计算机中的不同单位
那我们前面一直在说根据不同的应用,观察分析设置堆的大小,堆的各个代的大小,那具体观察什么呢?
我们一般在JVM的配置中增加一些打印 GC 日志的选项,配置方式和上面的类似,这样在 GC 产生时,会打印出各个代占用的大小,具体触发时间等。推荐的配置有以下几个:
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-Xloggc:<文件名>
-XX:PrintGCDateStamps
第一个和第四个选项可以任选一个,第一个打印自JVM启动以来的时间,一般也称为uptime, 第四个打印的是系统当前日期和时间
垃圾回收算法对应到的就是不同的垃圾收集器,具体到在 JVM 中的配置,是使用 -XX:+UseParallelOldGC 或者 -XX:+UseConcMarkSweepGC 这种不同的收集器来达到选择
其中 ParallelGC 也称为 吞吐量优先收集器(并行回收),可以提升应用的吞吐量,但在老年代大小调整之,进行几次垃圾回收后,不能满足应用的低延迟要求。
一般常用到ConcMarkSweepGC, 也称之为 CMS GC,其可以做到老年代的垃圾回收与应用程序的纯种并行执行,所以可以实现低延迟。
这里注意,由于 CMS GC 和其他GC回收算法使用的框架不同,因此不能混用,在使用CMS 进行老年代回收时,新生代默认使用了单线程回收算法,
此时可以通过配置 -XX:+UseParNewGC 来使用新生代并行回收

配置Tomcat注意的地方:内存、连接数
1、设置初始化内存大小,-Xms与-Xmx设置为一样
2、设置永久代内存,堆内存大小是老年代(FullGC)之后的34倍,也就是FullGC之后所使用的内存(Xmx/permSize=34)


配置Tomcat监控页面需要注意的地方:
如果在tomcat-usrs.xml 中配置了,重启Tomcat没有生效,
这时候需要修改webapps/manager/META-INF/context.xml文件,注掉Valve部分,这个是限制访问IP的

1、修改启动时内存参数、并指定JVM时区 (在windows server 2008 下时间少了8个小时):

在Tomcat上运行j2ee项目代码时,经常会出现内存溢出的情况,解决办法是在系统参数中增加系统参数:

window下, 在catalina.bat最前面:
set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m
一定加在catalina.bat最前面。

linux下,在catalina.sh最前面增加:

JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"

注意:前后二者区别,有无set,有无双引号。

2、线程池配置(Tomcat6下)

使用线程池,用较少的线程处理较多的访问,可以提高tomcat处理请求的能力。使用方式:

首先。打开/conf/server.xml,增加

最大线程500(一般服务器足以),最小空闲线程数20,线程最大空闲时间60秒。

然后,修改<Connector …>节点,增加executor属性,如:

<Connector executor=“tomcatThreadPool”
port=“80” protocol=“HTTP/1.1”
connectionTimeout=“60000”
keepAliveTimeout=“15000”
maxKeepAliveRequests=“1”
redirectPort=“443”
…/>

注意:可以多个connector公用1个线程池。

3、调整连接相关Connector的参数:

参数说明:

connectionTimeout - 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
keepAliveTimeout - 长连接最大保持时间(毫秒)。此处为15秒。
maxKeepAliveRequests - 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间) the maximum number of HTTP requests that can be held in the pipeline until the connection is closed by the server. Setting this attribute to 1 disables HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and pipelining. Setting this to -1 allows an unlimited number of pipelined or keep-alive HTTP requests. If not specified, this attribute is set to 100.
maxHttpHeaderSize - http请求头信息的最大程度,超过此长度的部分不予处理。一般8K。
URIEncoding - 指定Tomcat容器的URL编码格式。
acceptCount - 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认为10个。defines the maximum queue length for incoming connection requests when all possible request processing threads are in use. Any requests received when the queue is full are refused. The default value is 10.
disableUploadTimeout - 上传时是否使用超时机制
enableLookups - 是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
bufferSize - defines the size (in bytes) of the buffer to be provided for input streams created by this connector. By default, buffers of 2048 bytes are provided.
maxSpareThreads - 做多空闲连接数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程 the maximum number of unused request processing threads that are allowed to exist until the thread pool starts stopping the unnecessary threads. The default value is 50.
maxThreads - 最多同时处理的连接数,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。。 the maximum number of request processing threads to be created by this Connector, which therefore determines the maximum number of simultaneous requests that can be handled. If not specified, this attribute is set to 200.
minSpareThreads - 最小空闲线程数,Tomcat初始化时创建的线程数 the number of request processing threads that are created when this Connector is first started. The connector will also make sure it has the specified number of idle processing threads available. This attribute should be set to a value smaller than that set for maxThreads. The default value is 4.
minProcessors - 最小空闲连接线程数,用于提高系统处理性能,默认值为10。(用于Tomcat4中)
maxProcessors - 最大连接线程数,即:并发处理的最大请求数,默认值为75。(用于Tomcat4中)
备注:

Tomcat4中可以通过修改minProcessors和maxProcessors的值来控制线程数。

在Tomcat5+主要对以下参数调整
maxThreads
Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。
acceptCount
指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
connnectionTimeout
网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
minSpareThreads
Tomcat初始化时创建的线程数。
maxSpareThreads
一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

4、负载均衡、集群的配置

Tomcat6支持分布式部署,可以实现集群功能,提高响应能力。

5、

利用JMX监控Tomcat运行情况,需要手工调整启动参数,如下:

打开cataline.bat,增加一行

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=10090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%/conf/logging.properties"

linux下修改cataline.sh:
JAVA_OPTS="-Dcom.sun.management.jmxremote.port=10090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=%CATALINA_BASE/conf/logging.properties"

注意JDK/jre/lib/management/management.properties文件必须存在。

重新启动tomcat节点,然后用jconsole连接(此处端口wei10090)

6、Tomcat增加一个应用

在server.xml的Host标签中增加行

path代表上下文名称,空表示是根路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值