1汤姆猫性能优化

1.1连接参数

1.1.1默认连接配置

默认连接器采用阻塞式 IO,默认最大线程数为200,配置如下:
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="gbk" useBodyEncodingForURI="true" />

1.1.2连接参数调优

可通过下面属性配置优化默认连接器:
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="gbk" useBodyEncodingForURI="true"
                               maxThreads="300" minSpareThreads="50"
maxSpareThreads="100" acceptCount="1000" />

参数解释如下:
参数配置
参数含义
maxProcessors
Tomcat4 支持
minProcessors
Tomcat4 支持
maxThreads="300"
最大线程数
minSpareThreads="50"
初始化时创建的线程数
maxSpareThreads="100"
一旦创建的线程超过这个值, Tomcat 就会关闭不再需要的 socket线程
acceptCount="1000"
指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

1.1.3非阻塞式IO配置

使用非阻塞 IO连接器,只需将上面Connector配置中的 protocol协议部分改为:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="gbk" useBodyEncodingForURI="true"/>

1.2 JVM参数

1.2.1堆大小

配置堆大小参数如下:
-Xms1024m –Xmx2048m
避免由于堆内存不足导致的内存溢出。

1.2.2方法区大小

配置方法区大小参数如下:
-XX:PermSize=512m -XX:MaxPermSize=512m
避免由于加载 Jar包Class 过多导致的内存溢出。

1.2.3垃圾回收策略

修改新生代和老年代的 GC策略:
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled

参数解释如下:
参数配置
参数含义
-XX:+UseParNewGC
新生代采用 ParNewGC 多线程收集器
-XX:+UseConcMarkSweepGC
老年代采用 CMS 收集器,降低 GC停顿时间
-XX:+CMSParallelRemarkEnabled
降低标记阶段的停顿时间
-XX:+UseCMSCompactAtFullCollection
CMS 基于标记- 清除,会产生碎片,通过此配置在 CMS 收集后做一次压缩整理
-XX:CMSFullGCsBeforeCompaction=0
配置多少次 CMS GC 后,做一次压缩整理,就不用每次都做压缩整理了
-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80
当老年代使用 80 %后开始CMS 收集,默认值为 68% 。因为CMS 收集会有延迟,所以不能等到老年代占满时再收集
-XX:+CMSClassUnloadingEnabled
允许CMS 收集方法区 (PermGen) 。

JDK6 Update 3 及之前版本还需指定 -XX:+CMSPermGenSweepingEnabled参数
  
2常用命令整理


2.1 VisualVM vs. JProfiler

VisualVM是JDK自带的性能监控工具,在JDK\bin目录下可以找到,可以监控JVM的内存、
CPU、线程等情况,使用很方便。JProfiler是收费的性能监控工具,功能都差不多。
但这两者只能对本地Java应用进行堆中对象的监控,远程应用JProfiler需要部署额外的Agent,
或者将堆dump到远程服务器上,再下载到本地用VisualVM打开来查看,不能做到实时监控。
所以有时我们还需要在远程服务器上使用一些命令和工具进行监控。

2.2 JMap & JStat

使用JMap可以解决上面提到的问题,并通过Linux的watch命令达到实时监控的效果。
例如,通过下面命令打印堆上apache包占用内存最大的前30个对象,每一秒刷新一次:
     watch -n 1 -d "jmap -histo:live [pid] | grep "apache" | head -n 30"

输出结果如下:
 num     #instances         #bytes  class name

----------------------------------------------

   1:        226810       34953232  <constMethodKlass>

   2:        226810       30857024  <methodKlass>

   3:         23748       25330568  <constantPoolKlass>

   4:         23748       18308832  <instanceKlassKlass>

   5:        127546       17364792  [C

   6:         18895       14344152  <constantPoolCacheKlass>

   7:         23805       13295216  [I

   8:         31302       12693272  [B

   9:        179826       10561520  <symbolKlass>

  10:        140792        4505344  java.lang.String

  11:         24852        2584608  java.lang.Class

  12:          3056        2019600  <methodDataKlass>

  13:         60750        1944000  java.util.HashMap$Entry

  14:         31562        1892608  [S

  15:         19211        1813536  [Ljava.util.HashMap$Entry;

  16:         37068        1746912  [[I

  17:         22808        1268080  [Ljava.lang.Object;

  18:         14385        1265880  java.lang.reflect.Method

  19:         18487         887376  org.apache.catalina.loader.ResourceEntry

  20:         20590         823600  java.util.LinkedHashMap$Entry

  21:          1075         627800  <objArrayKlassKlass>

  22:         12469         598512  java.util.HashMap

  23:         14416         576640  java.lang.ref.SoftReference

  24:         11032         441280  java.util.concurrent.ConcurrentHashMap$Segment

JStat可以用来查看JVM的一些统计信息,及GC的情况等。JStat命令本身支持了定时刷新功能。
     jstat -gc [pid] 2000 10

具体参数含义如下:
    jstat -class pid:显示加载class的数量,及所占空间等信息。  

    jstat -compiler pid:显示VM实时编译的数量等信息。  

    jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。  

   jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。  

    jstat -gcnew pid:new对象的信息。  

    jstat -gcnewcapacity pid:new对象的信息及其占用量。  

    jstat -gcold pid:old对象的信息。  

    jstat -gcoldcapacity pid:old对象的信息及其占用量。  

    jstat -gcpermcapacity pid: perm对象的信息及其占用量。  

    jstat -util pid:统计gc信息统计。  

    jstat -printcompilation pid:当前VM执行的信息。  

2.3堆外内存查看工具

对于堆外内存的使用率,可以使用rednaxelafx做的一个工具来查看:
     https://gist.github.com/rednaxelafx/1593521

使用方法很简单,编译一个Java类后执行即可:
     javac -cp .:/export/servers/jdk1.6.0_25/lib/sa-jdi.jar DirectMemorySize.java

java -cp .:/export/servers/jdk1.6.0_25/lib/sa-jdi.jar DirectMemorySize -e [pid]

Tomcat性能优化及常用命令整理的更多相关文章

  1. MySQL性能优化以及常用命令

    1.将查询操作SELECT中WHERE条件后面和排序字段建立索引 2.按需查询,需要哪个字段就查哪个字段,禁止使用"SELECT * " 3.数据库引擎最好选用InnoDB,少用M ...

  2. tomcat 性能优化(内存优化 线程优化)

    转自:http://blog.sina.com.cn/s/blog_4b5bc01101014s81.html tomcat 性能优化 linux修改TOMCAT_HOME/bin/catalina. ...

  3. Tomcat性能优化(转载)

    出处:微信订阅号GitChat精品课程 — Tomcat性能优化 Tomcat 简单介绍 Sun 公司创建了第一个 Servlet 容器,即 Java Web Server,但 JWS 只是为了演示 ...

  4. Linux 系统基础优化和常用命令

    目录 Linux 系统基础优化和常用命令 软连接 tar解压命令 gzip命令 netstart命令 ps命令 kill命令 killall命令 SELinux功能 iptables防火墙 Linux ...

  5. 运维 07 Linux系统基础优化及常用命令

    Linux系统基础优化及常用命令   Linux基础系统优化 引言没有,只有一张图. Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令 ...

  6. tomcat 性能优化

    tomcat 性能优化tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈. tomcat内存优化linux修改TOMCAT_HOME/bin/ ...

  7. 【linux】---常用命令整理

    linux常用命令整理 一.ls命令 就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录.文件夹.文件权限)查看目录信息等等 常用参数搭配: l ...

  8. linux 服务器常用命令整理

    linux 服务器常用命令整理 目录 网络分析 - tcpdump \ telnet \ (netstat \ ss \ lsof) \ nload 网络传输 - scp \ rsync \ (rz ...

  9. (小组)Git 常用命令整理

    Git 常用命令整理 取得Git仓库 初始化一个版本仓库 git init Clone远程版本库 git clone git@xbc.me:wordpress.git 添加远程版本库origin,语法 ...

随机推荐

  1. zoj2112 树状数组+主席树 区间动第k大

    Dynamic Rankings Time Limit: 10000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Subm ...

  2. [bzoj省选十连测推广赛2]T2七彩树

    抄自:http://blog.csdn.net/coldef/article/details/61412577 当时看了就不会,看了别人的题解不懂怎么维护,最后抄了个代码....... 给定一棵n个点 ...

  3. Centos7发送邮件

    Centos7发送邮件 $ yum -y install mailx sendmail $ vim /etc/mail.rc set from=xxxxxx@.com set smtp=smtp..c ...

  4. PTA 社交网络图中结点的“重要性”计算(30 分)

    7-12 社交网络图中结点的“重要性”计算(30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互 ...

  5. Servlet中service()方法

    在学习Servlet的过程中,我们大多时候编码都是直接继承HttpServlet这个类,并且重写doGet ,doPost,但是查看Api时我们会发现Servlet接口 ,GenericSevlet抽 ...

  6. css控制file控件透明 漂浮

    css控件透明属性设置IE firefor设置方法<STYLE type=text/css>.upfilefield{position:absolute; FILTER: alpha(op ...

  7. Tomcat出现validateJarFile-jar not loaded问题

    tomcat启动时问题: validateJarFile(...\WEB-INF\lib\servlet-api.jar)-jar not loaded. See Servlet Spec 2.3, ...

  8. debug的一些按钮意义

    F9 resume programe 恢复程序 Alt+F10 show execution point 显示执行断点 F8 Step Over 相当于eclipse的f6 跳到下一步 F7 Step ...

  9. 学习ASP.NET Core Razor 编程系列七——修改列表页面

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  10. 关于使用Git的几点小技巧

    告诉git忽略对已经纳入版本管理的文件a的修改,git会一直忽略此文件直到重新告诉git可以再次跟踪此文件: git update-index --assume-unchanged a 告诉git恢复 ...