作为一个开发人员,肯定经常碰到这两种错误,PermGen Space, Out of Memory 的错误,那么他们是怎么导致的呢?
(一)PermGen space 【常见在web服务器对JSP进行pre compile的时候】
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m,当然大小根据实际情况调整。 如果是在tomcat ,手动设置MaxPermSize大小。修改TOMCAT_HOME/bin/catalina.sh 在 echo "Using CATALINA_BASE: $CATALINA_BASE" 上面加入以下行: JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
(二)java.lang.OutOfMemoryError: Java heap space Heap size 设置 JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
解决方法:手动设置Heap size 修改TOMCAT_HOME/bin/catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS="-server -Xms512m -Xmx512m -XX:MaxNewSize=256m"
原文地址:http://blog.csdn.net/fengyie007/article/details/1780375
上面网址里面有个评论写的也很好:启动了JDK自带的工具,在\jdk1.6.0_10\bin下面的jconsole.exe内存监控的工具,点击进入如下:选择PID为4472的这个进程,点击 ,进入如下界面 【图片略,点击不同的内存块的时候,一定要等几秒钟jconsole 视图才会刷新,切记!!!】
选择内存页,并且选择图表中最后一个选项的“内存池“Perm Gen”,下面的详细信息显示的是:
这个地方的最大值是65536Kb,也就是64M,我于是就找到原因了,64M肯定会导致溢出,但是我配置了几百兆的内存空间就是不生效呢。注意,这个是我在myclipse中启动的tomcat看到的结果。
接下来,我进入bin/catalina.bat文件中的“rem ----- Execute The Requested Command -”这个后面增加了下面的语句set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=512m,这个地方注意增加的位置是在rem ----- Execute The Requested Command –后面,最好set JAVA_OPTS=%JAVA_OPTS% 这个也要加上,这个网络上好多文档没有将这个位置交代清楚,或者说的不是这个地方,是不是其他地方也可以,我没有试。我手工启动tomcat,在cmd状态下输入:startup,然后看jconsole.exe,明细Perm Gen的内存就是我配置的内存521M,是生效了的.
但是我在myclipse中启动tomcat后,重新部署程序,错误依旧。原来文档《Linux 和 Windows修改Java虚拟机内存大小》(http://duanfei.iteye.com/blog/1189541)中提到
如果是通过Myeclipse启动Tomcat修改
Myeclipse配置选项 打开选项..输入tomcat关键字,然后点开Server下面的JDK就会出现配置区域Optional Java VM arguments.
直接加入 -Xms128m -Xmx512m
这个地方是有一个漏洞的,直接加入 “-Xms128m -Xmx512m ”,应该是“ -Xms256m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=512m”,这个是对myclipse生效的。如果没有-XX:PermSize=256m -XX:MaxPermSize=512m,那么PermGen的内存始终是64M。修改后,重启tomcat,重新部署,内存不再溢出了。
我的机器上是:Servers/Tomcat/Tomcat 6.x/JDK 中的Optional Java VM arguments:
找到了原因,解决也就自然很简单了。
注意这个地方Servers/Tomcat/Tomcat 6.x 这个地方还有一个参数:Optional program arguments,这个感觉作用不大,我也是修改后没有什么效果,我以为修改这个地方就可以了,导致我走了弯路。
设置eclipse集成tomcat的debug JVM内存信息
1)依次打开eclipse中的Run ==> Run(Debug) Configurations/Arguments,在VM arguments一栏中的末尾加上:-Xms256m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=512m 如图:
============================================================================
另外两个问题TPS,QPS,以及磁盘的IOPS ,参考如下两个地址
(一) http://jackyrong.iteye.com/blog/1747517
理论上可以计算出磁盘的平均最大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation),忽略数据传输时间。假设磁盘平均物理寻道时间为3ms, 磁盘转速为7200,10K,15K rpm,则磁盘IOPS理论最大值分别为,
IOPS = 1000 / (3 + 60000/7200/2) = 140
IOPS = 1000 / (3 + 60000/10000/2) = 167
IOPS = 1000 / (3 + 60000/15000/2) = 200
1000 是 1秒=1000毫秒,3ms是 磁盘寻道时间,7200 rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,数据传输时间远小于这两者,一般忽略。
实际测量中,IOPS数值会受到很多因素的影响,包括I/O负载特征(读写比例,顺序和随机,工作线程数,队列深度,数据记录大小)、系统配置、操作系统、磁盘驱动等等。
维基百科地址:http://en.wikipedia.org/wiki/IOPS
(二) http://blog.itpub.net/22664653/viewspace-767265/
总结:
Questions 是记录了从mysqld启动以来所有的select,dml 次数包括show 命令的查询的次数。这样多少有失准确性,比如很多数据库有监控系统在运行,每5秒对数据库进行一次show 查询来获取当前数据库的状态,而这些查询就被记录到QPS,TPS统计中,造成一定的"数据污染".
如果数据库中存在比较多的myisam表,则计算还是questions 比较合适。
如果数据库中存在比较多的innodb表,则计算以com_*数据来源比较合适。
相关推荐
在做db基准测试的时候,qps,tps 是衡量数据库性能的关键指标。本文比较了网上的两种计算方式。先来了解一下相关概念。 概念介绍: QPS:Queries Per Second 查询量/秒,是一台服务器每秒能够相应的查询次数,是对...
在数据库性能监控和评估中,QPS、TPS和IOPS是三个非常重要的指标,它们能够直接反映数据库系统的性能状态。通过对这些指标的准确计算和有效分析,DBA可以针对不同应用场景做出适当的性能优化和调整,以提升数据库的...
在IT行业中,尤其是在Java架构设计领域,理解和计算系统峰值、TPS(每秒事务数)、QPS(每秒查询率)以及并发数等指标对于优化系统性能至关重要。这些概念是评估系统负载能力和处理能力的标准。 1. **响应时间(RT...
本文将深入探讨如何查询MySQL的QPS和TPS等信息,并通过Python脚本`mysqlInfo.py`来实现这一功能。 首先,QPS代表每秒查询次数,它是衡量数据库处理查询请求的能力的标准。而TPS则是每秒事务处理量,尤其在涉及事务...
服务器端性能优化是IT行业中一个至关重要的议题,尤其是在WEB服务器端开发领域,其目标在于有效提升QPS(Query-per-second,每秒查询率)和RT(Response-time,响应时间)。本文将深入探讨如何通过合理利用资源如CPU...
系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间QPS(TPS):每秒钟request/事务数量并发数:系统同时处理的request/事务数响应时间:一般取平均响应时间(很多人经常会把并发数和TPS理解混淆)理解了上面三...
【服务器端性能优化-提升QPS:RT1】主要探讨的是如何通过优化服务器性能来提升QPS(每秒查询率)和降低RT(响应时间),从而实现系统效率的最大化。以下将详细介绍相关知识点: 1. **优化方向**: - 首先,要找到...
例如,等待事件长时间居高不下,可能是由于I/O延迟、网络延迟或资源争抢等问题。DBA需要深入研究这些事件,找出性能瓶颈,并采取相应的优化措施。 在报告B中,尽管"Elapsed time"与报告A相同,但"DB Time"显著降低...
本文将深入探讨几个关键概念和技术,包括TPS、QPS、吞吐量、性能测试流程和策略,以及性能瓶颈分析与调优。 1. TPS(Transactions Per Second)和QPS(Queries Per Second) TPS是衡量系统每秒处理事务的数量,而...
在IT行业中,性能测试是评估系统能力的关键环节,其中几个重要的指标包括TPS(吞吐量)、QPS(每秒查询率)、并发数以及RT(响应时间)。理解这些概念有助于优化系统性能,提高用户体验。 1. 响应时间(Response Time, RT...
Java是一种广泛使用的编程语言,尤其在企业级应用和服务器端开发中占据主导地位。压力测试是验证应用程序在高负载或...通过学习和使用这个工具,你可以更好地理解和掌握Java并发编程、性能测试以及系统优化等相关技术。
Grafana-JVM-Dashboard模板
8. **自定义配置**:用户可以根据业务需求,自定义QPS限制、重试策略等参数,以适应不同场景的需求。 9. **扩展性**:随着业务增长,专用网关应具备良好的扩展性,能够无缝接入新的服务器和SDK,以满足更高的并发...
基于cms的高并发低延时的gc参数,生产实战参数,各位看官烦请点赞