面试题:如果WEB请求并发量过高,Tomcat所在服务器经常出现服务异常,应该如何处理?
服务器出现服务异常的情况:
1.问题提示:
- 高并发的时候出现异常
- 代码无异常,并发低或单线程处理的时候,无异常。排除了线程安全的问题。
2.问题所在:
1.并发处理能力差;线程数量不够
- 物理内存太小,线程启动的时候,物理内存不足。(硬件问题)
- 物理内存足够,线程数量不足。tomcat线程池太小了。(Tomcat的优化问题)
2.内存压成能力差;内存不足
- 物理内存太小。
- 物理内存足够,JVM占用的内存太小。(JVM的优化问题)
Unix的家族的进程或者线程的极值 :
4个字节:
8个字节:
JVM的优化
元空间中存放的是永远不会回收的
ajp 回路跳转的
硬件
负载均衡
页面静态化
消息中间件
多线程
1.Tomcat的jvm内存配置进行修改,通常是修改是在catalina.bat中添加:set CATALINA_OPTS=-Xms128M -Xmx256M set JAVA_OPTS=-Xms128M -Xmx256M 或者把%CATALINA_OPTS%和%JAVA_OPTS%代替为-Xms128M -Xmx256M 具体数字需要根据具体情况而定。
其次就是对于线上生产环境的Tomcat,有一个至关重要的参数是需要根据自己的情况调节好的,那就是他的工作线程数量。众所周知,对于进入Tomcat的每个请求,其实都会交给一个独立的工作线程来进行处理,那么Tomcat有多少线程,就决定了并发请求处理的能力。但是这个线程数量是需要经过压测来进行判断的,因为每个线程都会处理一个请求,这个请求又需要访问数据库之类的外部系统,所以不是每个系统的参数都可以一样的,需要自己对系统进行压测。但是给一个经验值的话,Tomcat的线程数量不宜过多。因为线程过多,普通虚拟机的CPU是扛不住的,反而会导致机器CPU负载过高,最终崩溃。同时,Tomcat的线程数量也不宜太少,因为如果就100个线程,那么会导致无法充分利用Tomcat的线程资源和机器的CPU资源。所以一般来说,Tomcat线程数量在200~500之间都是可以的,但是具体多少需要自己压测一下,不断的调节参数,看具体的CPU负载以及线程执行请求的一个效率。在CPU负载尚可,以及请求执行性能正常的情况下,尽可能提高一些线程数量。但是如果到一个临界值,发现机器负载过高,而且线程处理请求的速度开始下降,说明这台机扛不住这么多线程并发执行处理请求了,此时就不能继续上调线程数量了。
https://blog.youkuaiyun.com/wangshuminjava/article/details/80922840