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. hdu 5600 BestCoder Round #67 (div.2)

    N bulbs  Accepts: 275  Submissions: 1237  Time Limit: 10000/5000 MS (Java/Others)  Memory Limit: 655 ...

  2. SpringCloud学习之soa基础

    一.soa简单介绍 1)面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.SOA是解决复杂业务模块,提高扩展性,维护性,可伸缩 ...

  3. UDA机器学习基础—评估指标

    这里举例说明 混淆矩阵  精确率 召回率  F1

  4. Android智能手机中各种音频场景下的audio data path

    上一篇文章(Android智能手机上的音频浅析)说本篇将详细讲解Android智能手机中各种音频场景下的音频数据流向,现在我们就开始.智能手机中音频的主要场景有音频播放.音频录制.语音通信等.不同场景 ...

  5. 认识Json解析json生成json

    .markdown-body hr::after,.markdown-body::after { clear: both } .loopLine,.messageLine0 { } .markdown ...

  6. Python开发——利用正则表达式实现计算器算法

    Python开发--利用正则表达式实现计算器算法 (1)不使用eval()等系统自带的计算方法 (2)实现四则混合运算.括号优先级解析 思路: 1.字符串预处理,将所有空格去除 2.判断是否存在括号运 ...

  7. react 或 vue 中引用 jQuery 插件

    前言 今天与遇到一个令人抓狂的事情, 因为项目中有个交互太过于复杂而且冷门, 没有人封装类似react-swiper那种的移植过来的插件 只有现成的jQuery插件. 而时间并不宽裕,自己重写成rea ...

  8. 天梯赛-L1-018. 大笨钟

    L1-018. 大笨钟 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 微博上有个自称"大笨钟V"的家伙,每 ...

  9. Laravel-admin 七牛云上传文件到七牛云出现卡顿失败情况

    由于所做项目需要管理后台众多,所以选择了Laravel-admin后台框架进行开发.节省了权限控制以及页面处理等问题的时间 Laravel-admin文档地址 http://laravel-admin ...

  10. PHP Zip File 函数

    通过 PHP 中的相关函数,你可以实现 zip 文件的解压缩操作! PHP Zip File 简介 Zip File 函数允许您读取压缩文件. 安装 如需在服务器上运行 Zip File 函数,必须安 ...