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. Delphi7 ADO面板上的控件简介

    ? ADO Connection的主要方法:1) Begin Trans    开始启动一个新的事务,必须保证数据连接处于激活状态.2) Cancel    关闭于数据库的连接.3) Commit T ...

  2. 四种常用IO模型

    1) 同步阻塞IO(Blocking IO)2) 同步非阻塞IO(Non-blocking IO)3) IO多路复用(IO Multiplexing)4) 异步IO(Asynchronous IO) ...

  3. ThreadLocal基本原理及运用

    ThreadLocal提供本地线程变量.这个变量里面的值(通过get方法获取)是和其他线程分割开来的,变量的值只有当前线程能访问到,不像一般的类型比如Person,Student类型的变量,只要访问到 ...

  4. Maven实现多环境打包

    在开发的过程中,经常需要面对不同的运行环境(开发环境.测试环境.生产环境.内网环境.外网环境等等),在不同的环境中,相关的配置一般不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置 ...

  5. Linux(centos7)下安装Docker

    近期公司开始推Docker技术.这个系列的文章都是基于CentOS7系统下进行讲解的. Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器 ...

  6. Angular5学习笔记 http请求

    在anular4更新到angular5后,有些模块也发生了有些变化,例如http模块. 首先在app.module.ts里面引入HttpClientModule import { HttpClient ...

  7. 63. Unique Paths II(中等, 能独立做出来的DP类第二个题^^)

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

  8. CI下载与安装_基础配置_MVC

    CI:CodeIgniter -- 由Ellislab公司的CEORickEllis开发,是一个简单快速的PHP MVC框架. =============下载和安装================地址 ...

  9. JavaScript正则表达式模式匹配(1)——基本字符匹配

    var pattern=/g..gle/; //点符号表示匹配除了换行符外的任意字符 var str='g78gle'; alert(pattern.test(str)); var pattern=/ ...

  10. Apache 443端口占用解决方法

    当运行httpd.exe时,出现如下问题 原因是启动Apache会占用443端口,而443被其他程序占用了.我们只需将Apache默认端口443改掉就行.网上搜了一下,说是更改Apache24\con ...