欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

性能相关问题(TPS,QPS,IOPS,以及JVM参数等)

程序员文章站 2022-07-12 14:30:59
...

      作为一个开发人员,肯定经常碰到这两种错误,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,以及JVM参数等)
            
    
    博客分类: Oracle数据库性能开发java TPSQPSIOPSJVM参数 
 

 

  ============================================================================

 另外两个问题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_*数据来源比较合适。

 

 

 

  • 性能相关问题(TPS,QPS,IOPS,以及JVM参数等)
            
    
    博客分类: Oracle数据库性能开发java TPSQPSIOPSJVM参数 
  • 大小: 92.5 KB

上一篇: js入门

下一篇: 18、JavaBean与Jsp