使用tomcat做为java容器,cpu占用偏高的原因,目前公司服务器上面跑的ubuntu环境nginx+tomcat+mysql运行一段时间之后java进程cpu偏高,会出现网站打不开的情况。所以进行了如下分析。
一,首先查看tomcat日志,如果有出现OOM错误(内存溢出)可以对应的加大jvm的内存大小。
1,修改tomcat目录下bin目录下的catalina.sh文件,在
#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"
这行下面添加如下内容
JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xmn512m -XX:PermSize=256M -XX:MaxPermSize=256m -Xss256k -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=20 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=73 -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=2 -Djava.awt.headless=true"
上面的配置是基于4G内存设置的,具体修改看自己手上服务器的配置。
参数的含义:
-server 告诉tomcat使用server模式 能获得更大并发数和性能
-Xms2048m -Xmx2048m JVM内存的总数
-Xmn512m 年轻代内存大小
-XX:PermSize=256M -XX:MaxPermSize=256m 永久带内存大小
Xss256k 线程大小
-XX:SurvivorRatio=4 设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxTenuringThreshold=20 设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为 一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率
-XX:+UseParNewGC 对年轻代采用多线程并行回收,这样收得快
XX:+UseConcMarkSweepGC
CMS gc,这一特性只有jdk1.5即后续版本才具有的功能,它使用的是gc估算触发和heap占用触发。
我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMS GC后可以在GC次数增多的情况下,每次GC的响应时间却很短,比如说使用了CMS GC后经过jprofiler的观察,GC被触发次数非常多,而每次GC耗时仅为几毫秒
-XX:CMSInitiatingOccupancyFraction=73 说明年老代到73%满的时候开始执行对年老代的并发垃圾回收(CMS)。
-XX:+UseCMSCompactAtFullCollection 打开对年老代的压缩。可能会影响性能,但是可以消除碎片
-XX:+CMSParallelRemarkEnabled 降低标记停顿
-XX:CMSFullGCsBeforeCompaction 由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
参考网站:http://blog.csdn.net/lifetragedy/article/details/7708724
2,修改参数之后重启tomcat,查看参数是否生效
jmap -heap javaPID 查看JVM内存分配情况
jstat -gcutil javaPID 1000 30 查看JVM内存回收情况
经 过上面的修改应该就可以完成对tomcat进程飙高的情况了。如果运行一段时间之后通过jstat查看各个内存代的使用情况,发现老年代100% 一直在触发FULL GC 那就是内存大小的原因了。有条件的可以添加内存,没条件的可以设置 每天重启一次tomcat或者一个星期重启一次来释放jvm内存。问题解决。
二,如果想查看是否是代码层的原因,就需要另外的办法
1,使用命令jstack命令查看占用CPU最高的线程。
PID=`ps aux | grep java | head -1 | awk '{print $2}'`
ps -mp $PID -o THREAD,tid,time | sort -k 2 -r | head -20
echo -n -e " shur ru:"
read f
if [ -z $f ]
then
echo "no"
else
jstack "$PID" | grep `printf "%x\n" $f` -A 30
fi
一个简单的监控脚本,查看JAVA进程占用CPU最高的线程在做什么以此来分析是否是代码层的问题。
参考网站:http://blog.csdn.net/blade2001/article/details/9065985
相关推荐
Tomcat作为Java Web容器,其性能很大程度上取决于JVM的配置。 二、JVM内存配置 1. 堆内存设置:Java堆是JVM的主要内存区域,用于存放对象实例。合理的堆大小设置可以避免频繁的垃圾回收和内存溢出问题。通常,可以...
【JBOSSTomcat最大连接数配置和JVM内存配置】 在JBOSSTomcat服务器的性能优化中,最大连接数配置和JVM内存配置是两个至关重要的环节,它们直接影响到服务器的响应速度和稳定性,尤其对于处理大量并发请求的场景。 ...
这意味着,要优化Tomcat的性能,首先需要对JVM进行合理的配置。本文将深入探讨如何通过调整JVM的设置来优化Tomcat服务器,尤其是关于内存管理和连接器优化的关键知识点。 #### 二、JVM内存优化 ##### 1. 初始化堆...
- `tomcat配置JVM.txt`应该是详细的JVM配置指南,提供了如何在Tomcat的启动脚本或者server.xml文件中添加和调整JVM参数的说明。 4. **垃圾收集和内存管理**: 了解不同类型的垃圾收集器,如Serial、Parallel、...
通过合理配置Tomcat的内存参数,可以有效提升应用的性能与稳定性。 ### Tomcat内存配置的重要性 在实际的应用场景中,由于不同的应用场景对资源的需求不同,因此合理设置Tomcat的内存参数至关重要。例如,在高并发...
4. **调整配置**:优化Tomcat和JVM的配置,如增大堆内存、选择合适的垃圾收集器、调整线程池大小等。 5. **硬件升级**:如果以上方法都无法解决问题,可能需要考虑提升服务器的硬件配置,如增加CPU核心数、提高CPU...
通过合理配置Tomcat的JVM启动参数,可以有效提升系统的性能和稳定性。在实际应用中,还需要根据具体的业务场景和硬件资源情况进行微调,以达到最佳效果。此外,定期分析GC日志可以帮助我们更好地理解系统的运行状态...
### Tomcat性能调优及配置技巧 #### 一、Tomcat设置Gzip,减少网络流量 Gzip是一种常用的压缩算法,通过将响应的数据进行压缩,可以显著减少数据在网络中的传输量,从而加快页面加载速度,提升用户体验。在Tomcat...
本教程将详细介绍在Linux操作系统上安装和配置Tomcat的步骤。 ### 一、下载Apache Tomcat 首先,你需要从Apache官方网址(http://tomcat.apache.org/)下载最新版本的Tomcat。例如,这里我们使用的是8.5.81版本的`...
3. **使用JProfiler分析Tomcat**:JProfiler可以帮助分析Tomcat的性能瓶颈,比如查看哪个Servlet或JSP消耗了大量CPU,或者检查内存占用情况,找出可能的内存泄漏。 4. **JProfiler用例**:`JProfiler用例.doc`可能...
本篇文章将深入探讨Tomcat的启动参数配置和监控参数设置,以及如何利用jVisualVM工具来监控Tomcat的运行状态。 一、Tomcat启动参数配置 1. **基本启动参数**: - `-D<name>=<value>`:定义系统属性,例如`-Djava....
本篇内容将详细探讨如何在Linux环境中配置Tomcat集群,以提高系统的可用性和性能。 一、Linux基础 在开始配置之前,需要对Linux操作系统有一定的了解。熟悉基本的命令行操作,如文件管理、用户权限、网络设置等,这...
在IT行业中,Tomcat作为一款广泛应用...总的来说,解决Tomcat内存溢出的关键在于理解和配置JVM内存管理,以及持续监控和优化应用程序。通过上述步骤,我们可以提升Tomcat的服务稳定性,降低因内存溢出导致的系统故障。
本教程将详细阐述如何安装和配置Tomcat,以便开发者能够顺利地在本地环境中搭建开发环境。 1. **下载Tomcat** 首先,你需要从Apache官方网站(http://tomcat.apache.org/)下载最新稳定版的Tomcat。通常,你会找到...
"jvm优化参数配置"是确保Tomcat稳定运行的关键环节,能够提高应用的响应速度,减少内存泄露,提升系统整体性能。以下是对JVM参数优化的详细解释: 1. **内存配置**: - **堆内存(Heap Memory)**:分为新生代...
本文将深入讲解如何配置Tomcat应用服务器的内存使用,确保应用高效稳定运行。 首先,了解Tomcat内存设置的背景是必要的。在默认情况下,Tomcat使用的是JVM(Java虚拟机)分配的初始内存,这个值通常很小,比如64MB...
综上所述,该课程涵盖了HTTP协议的基础知识、Nginx进阶配置、JVM虚拟机运维实践以及Tomcat的运维部署等多个方面的内容,旨在帮助学员全面掌握Web服务器的运维技能。无论是对于初学者还是有一定经验的技术人员来说,...
1. **CPU占用过高问题排查**:当遇到Java应用(如Tomcat)CPU占用过高时,通常会使用`jps`找到JVM进程,`jstack`分析线程状态,`jstat`监控JVM内存和垃圾收集情况。 2. **log4j死锁问题**:log4j 1.x版本可能存在...