搜档网
当前位置:搜档网 › jvm优化

jvm优化

?响应时间=网络传输时间+服务器响应时间+网络传输时间+前端渲染时间
TPS:是指每秒通过事务数,直接反应系统性能的指标,该值越大时,系统性能会比较好,当然每个系统都会有它的上线
每秒点击数:每秒点击数代表用户每秒向WEB服务器提交的HTTP请求书。
吞吐量:单位时间内系统处理的请求数。
资源利用率:cpu:系统CPU 用户CPU
Load Average:指一段时间内cpu正在处理和等待cpu处理的任务,也就是cpu使用队列的长度的统计信息
Memroy:短时间内可用内存越来越少,不代表一定有内存泄露或溢出。
IO:与磁盘的交互,重点关注交互频率,磁盘队列长度。
并发测试:并发数=pv/pv Time * 页面链接次数 * HTTP响应时间 * 因数 /web 服务器数量。

Tomcat 与 JVM优化





Tomcat的运行是基于JAVA的虚拟机。SUN的JVM动态库有client和Server两个版本,分别对桌面应用和服务器应用做了相应的优化,client版本加载速度比较快,server版本加载速度比较慢但运行起来比较快。
在命令行输入java -version 可以看到jvm目前配置的那个版本。如果要修改jvm的版本可更改默认java.exe调用的jvm.dll,这个由jvm.cfg决定。编辑%JAVA_HOME%jre/leb/i386/jvm.cfg文件,里面第一行写的是-client(默认就是client版本),把第二行的-server KNOWN放到第一行,重启tomcat,命令java -version.
表明Tomcat修改使用Server版本的jvm,读者可进行比对测试,对比一下client版本的JVM和Server版本性能差异,从而决定采用哪个版本的JVM。


tomcat与内存泄露
tomcat默认内存可以使用的内存为128MB(不同的版本有所区别),在较大型的应用项目中,这点内存是不够的,需要调大,否则很容易出现"out of memery"的问题。
在Linux下,修改配置文件{tomcat_home}/bin/catalina.sh , 增加如下设置。
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用内存大小】'
需要根据服务器可用的内存把这
另外,对于SUN的JVM,MaxpermSize 参数的调整比较重要。PermSize的大小决定了保持对象(类、方法)的大小,如果碰到"OutOfMemoryError:PermGen"的错误提示,应该考虑到调整这个参数的大小,SUM JVM默认保留64MB作为PermSize大小

maxThreads:链接线程数监控与调整
可以通过修改Tomcat安装目录的conf文件夹中的配置文件server.xml文件来调整tomcat最大链接线程数。maxThreads是最大并发线程数,如果同时的并发请求量超过这个值,tomcat也不会再增加线程,这是并发请求进入队列,增加maxThreads的值可以加大tomcat的并发处理能力,但是设置过高的maxThreads值也会对性能带来影响,占用过多的系统资源,甚至造成tomcat崩溃。
当maxThreads设置比较小时,tomcat处理请求的速度有所下降,同时也需要设置最大并发请求数
**一般web服务器允许的最大链接数还受限制于操作系统内核参数设置,通常linux是1000个左右,在centos中可以用一下命令查看Socket最大连接数: ulimit -a
其中的open files是允许打开的最大文件数,centos默认是1024
修改vi /etc/security/limits.conf 配置文件 ,将文件数设置为32768,在配置文件中添加:
* soft nofile 32768
* hard nofile 32768
重启系统

acceptCount:最大排队的设置
acceptCount是指当所有线程都已经被用于处理请求时,允许多少新的连接请求进入排队队列等候处理,当队列满时,任何新的请求都将被拒绝,默认设置为1000
connectionTimeout="20000"
acceptCount="2000"
maxThreads="800"
redirectPort="8443" URIEncoding="UTF-8"/>
应用代码性能诊断分析
1、内存泄露诊断分析
程序代码中,与内存有关的问题可以分为两大类:内存访问错误和内存使用错误
内存访问错误包含读内存错误和写内存错误,读内存错误可能让程序模块返回意想不到的结果,从而导致后续的程序模块运行异常。
内存使用错误主要指程序模块申请的内存没有正确释放,系统可用内存逐渐减少,是程序运行逐渐减慢,直至停止。
2、代码书写问题导致内存泄露
一般我们常说内存泄露指的是堆内存的泄露,堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以再程序运行期决定)使用完后必须显示释放的内存。
一般

使用:malloc , calloc ,realloc , new ,等函数从堆中分配到一块内存,使用完后,城西南 必须负责相应的调用free和delete释放内存块,否则,这块内存就不能被内存再次使用,我们就说这块内存泄露了。
造成内存泄露的原因很多,最常见的有以下几种。
分配完内存忘记回收,
程序写法有问题,造成没有办法回收
某些API函数的使用不正确,造成内存泄露
没有及时释放
JVM内存泄露诊断分析--JVM原理与监控
PermGen是JVM自用的区域,是内存的永久保护区,用于存放反射代理和Class,在Class被装载时会被放到PermGen中
JVM启动参数介绍
JVM启动时允许加载指定的参数,如果参数指定不恰当,可能会对JVM性能造成较大的影响
Xmn:Eden Generation的Heap大小,一般设置为Xmx的1/3 或 1/4
Xmx:设置JVM Heap大小最大值,这里的heap= NEW Generation+Old Generation,但不包括PermGen。
Xms:设置JVM Heap大小初始值
XX:NewRatio :New/Old 的大小比率
XX:NewSize : New Generation Heap的大小
XX:MaxNewSize :可以通过NewRatio 和 -Xmx计算得到
XX:SurvivorRatio : Eden/Survivor Space大小比率
XX:PermSize : PermGen的初始值
XX:MaxpermSize: PermGen最大值
Xss:设置每个线程的Stack大小
XX:+UseParNewGc:表示多CPU下缩短Minor Gc的时间
XX:+UseParallelGc :设置后可以使用并行清除收集器(多CPU)
XX:+ParallelGcThreads:可用来增加并行度(多CPU)
XX:+AggressiveOpts :是否允许激活最近的实验性性能调整
XX:-Xnoclassgc:是否允许类垃圾收集,默认设置时允许类GC

Servlet 常见性能问题分析与优化
Servlet是J2EE架构中重要的组成部分,Servlet可以生成动态的WEB页面,它是客户端请求(web浏览器或其他HTTP客户端程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层
Servlet压缩输出
http压缩可以大大提高浏览器的速度,它的原理是:在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负载压缩后在解析呈现,HTTP压缩大概可以节省40%左右的流量。
public void doGet(HttpServletRequest request ,HttpServletResponse response) throws IOException , ServletException{
String c = request.getParameter("c");
if("c".equals(c)){
response.setHeader("Content-Encoding","gzip");
compressionResponse cResponse = new CompressionResponse(response);
response.setContentTyPe("text/plain");
final OutputStream out = cResponse.getOutputStream();
for(int i=0;i<1000;i++){
out.write(UUID.randomUUID().toString().getBytes());
out.flush();
}
out.close();
}
else{
response.setContentTyPe("text/plain");
PrintWriter out = response.getWrite();
for(int i=0;i<1000;i++){
out.print(UUID.randomUUID().toString().getBytes());
out.flush();
}
out.close();
}
}







相关主题