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. bzoj2839: 集合计数 容斥+组合

    2839: 集合计数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 523  Solved: 287[Submit][Status][Discuss] ...

  2. Python virtualenv 使用总结篇

    一.virtualenv的安装 1.使用pip全局安装virtualenv,建议使用pip 1.3或更高版本,在1.3之前,pip没有通过SSL从PYPI下载. $ [sudo] pip instal ...

  3. Python【第五课】迭代器,生成器,数据序列化

    本节内容 列表生成式,生成器,迭代器 Json & pickle 数据序列化 1.列表生成式,生成器,迭代器 1.1 列表生成式 列表生成式?不就是生成个列表的表达式,恩~~~ 差不多. 一般 ...

  4. Python【第一课】 Python简介和基础

    本节内容 Python安装(windows) 第一个程序(windows中的python) 变量 字符编码 注释 用户输入 模块初步认识 数据类型 数据运算 表达式if...else 表达式for l ...

  5. 如何使用 TeamViewer 配置QuickConnect按钮?

    QuickConnect作为TeamViewer中一个比较重要的部分,得到了很多用户的认可.那么在实际运用中,怎么才能设置网页或单个程序的QuickConnect呢?所以小编以此问题为例,教大家如何配 ...

  6. Timestamp转Calendar

    Timestamp scheduleTime = r.getTimestamp("time_recv"); Calendar calendarScheduleTime = Cale ...

  7. mybatis源码解读(一)——初始化环境

    本系列博客将对mybatis的源码进行解读,关于mybatis的使用教程,可以查看我前面写的博客——传送门. 为了便于后面的讲解,我们这里首先构造一个统一环境.也可以参考mybatis官网. 1.数据 ...

  8. Linux阿里云挂载磁盘,并开机自动挂载

    Linux下磁盘挂载 公司新订购阿里云ECS,需要挂载当前的磁盘.暂时没有运维,自己动手挂载磁盘. 具体步骤如下: 1.查看是否已经分配 [root@iZ2ze1tefvghtbgkdur3xfZ / ...

  9. ubuntu + 不识别无线网卡简易处理方式 + 需有线联网

    进入ubuntu, 连接有线网; 系统设置 -> 软件和更新 -> 附加驱动 -> 找到无线网卡驱动并更新 若无候选的无线网卡驱动,我就没招了.

  10. [Angular2]eclipse中angular2开发环境的搭建

    本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan 环境准备 1.eclipse neon 2.网络连接 插件地址 eclipse的插件市场地址: htt ...