1.监控项
tomcat
- JVM内存:关注GC回收频率,FullGC次数越少越好
- 最大线程数:线程池连接数长期大于80%以上,建议优化
- 数据库连接数:活动连接数长期大于80%以上,建议优化连接池
- 请求数/请求状态:线程数,线程状态,大量Blokked状态线程可以Dump线程栈信息进行分析
应用服务器架构分析
- web应用服务器是互联网应用系统的基础架构软件,通常也称为“中间件”,它负责处理动态的页面请求,例如,处理JSP的页面请求,再请求数据库读取数据
Tomcat与内存泄漏
- tomcat默认可以使用的内存为128M(不同的版本有所区别)在较大型的应用项目中,这点内存是不够的,需要调大,否则很容易出现“Out of Menmery”的问题。在Linux/Unix下,修改配置文件/bin/catalina.sh,增加如下设置:JAVA_OPTS='-Xms[初始化内存大小]' -Xmx[可以使用的最大内存],可以根据服务器可用内存把这两个值调大。
- 另外,对于SUN的JVM,MaxPermSizi参数的调整也比较重要。PermSizi的大小决定了保持对象(类、方法)的大小。如果碰到“OutofMenmeryError:PermGen”的错误提示,应该考虑调整这个参数的大小。SUN JVM默认保留64MB作为PerSizi大小。
acceptCount
- acceptCpunt是指当所有进程都已经被用于处理请求时,允许多少新的连接请求进入排队队列等候处理,当队列满时,任何新的请求都会被拒绝。默认值为100
Connector
- 连接器的配置
2.线程状态
- RUNNABLE:正常运行中
- WAITING:此状态指线程拥有了某个锁之后,调用了wait方法,等待其他线程/锁拥有者调用notify/notifyAll唤醒该线程继续下一步操作,典型的例子是生产者消费者模型。
- TIME-WAITING:有限制的WAITING,一般出现在调用wait(long)、join(long)等情况,另外线程sleep后,也会进入TIME-WAITING状态。
- BLOCKED:阻塞状态,代表线程繁忙正在执行中,可能有资源等待情况。比如我们常说的多个线程同步操作的场景,一个线程正在等待另一个线程的同步块释放;我们要关注长期的BLOCKED状态线程,Dump线程就可以找到程序,从而分析出在做什么操作,等待哪些资源,这是分析问题、解决问题的常用方法。
- TERMINATED:表示该线程的run方法已经执行完毕,进入死亡状态,如果线程被长时间持有则可能不会被回收。
BLOCKED和WAITING的区别,BLOCKED实在临界点外面等待进入(等待获取锁占用资源),WAITING是在临界点里面等待别人notify(唤醒),线程调用了join方法加入了另外的线程的时候,也会进入WAITING状态,等待被它join的线程执行结束,然后自己往下继续执行。
我们首先要关心的是CURRENT_THREADS_BUSY与CURRENT_THREADS_COUNT是否接近MAX_THREADS,如果是,则需要加大MAX_THREADS的数量;如果服务器硬件支撑不了更多的线程数,就需要更换更强的硬件或者做集群来分担负载
tomcat的初始线程是10个
3.maxThreads(最大线程数)
可通过修改TOMCAT安装目录的Conf文件夹的配置文件server.xml文件来调整Tomcat最大连接线程数。maxThreads是最大并发线程数,如果同时的并发请求量超过这个值,Tomcat也不会再增加线程,这时并发请求将进入队列。增加maxThreads的值可以加大Tomcat的并发处理能力,但是设置过高的maxThreads值也会对性能带来影响,占用过多的系统资源,甚至造成Tomcat崩溃。注意:一般web服务器允许的最大连接数还受限制于操作系统的内核参数设置,通常windows是2000个左右,Linux是1000个左右。
connectionTimeout(连接超时的设置)
- connectionTimeout是Connector从接受连接到提交url的等待的时间(单位是毫秒)默认设置为60000(既60秒)
4.acceptCount
acceptCount是指当所有线程都已经被用于处理请求时,允许多少新的连接请求进入排队队列等候处理,当队列满时,任何新的请求都将被拒绝。默认设置为100。
5.Tomcat请求处理机制
6.连接器配置
7.APR配置