java面试之tomcat性能优化

1、你怎样给tomcat调优
  1. JVM参数调优

-Xms<size>表示JVM初始化堆的大小,-
Xmx<size>表示JVM堆的最大值。这两个值的大小一般根据需要进行设 置。

当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出, 并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大 值的80%。在 catalina.bat 中,设置 JAVA_0PTS='-Xms256m- Xmx1024m',表示初始化内存为256MB,可以使用的最大内存为1024MB。

  1. 禁用DNS查询

当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或 者通过域名服务器查找机器名转换为IP地址。DNS查询需要占用网络,并 且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP 的过程,这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups
数值:

<Connectorport="80"maxThreads="150"minSpareThreads="25" maxSpareThreads="75"enableLookups="false"redirectPort="8443" acceptCount="100"debug="0"connectionTimeout="20000" disableUploadTimeout="true"/>
  1. 调整线程数

通过应用程序的连接器(Connector)进行性能控制的的参数是创建的处理请求的线程数。Tomcat使用线程池加速响应速度来处理请求。在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关 的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序 员写出CPU最大利用率的高效程序,使空闲时间保持最低,从而接更多的 请求。

在Tomcat5

maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示
Tomcat可创建的最大的线程数。

acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可 以放到处理队列中的请求数,超过这个数的请求将不予处理。

connnection Timeout网络连接超时,单位:毫秒。设置为0表示永不 超时,这样设置有隐患的。通常可设置为30000毫秒。

minSpareThreadsTomcat初始化时创建的线程数。

maxSpareThreads 一旦创建的线程超过这个值,Tomcat就会关闭不再 需要的socket线程。

最好的方式是多设置几次并且进行测试,观察响应时间和内存使用情况。 在不同的机器、操作系统或虚拟机组合的情况下可能会不同,而且并不是 所有人的web站点的流量都是一样的,因此没有一刀切的方案来确定线程 数的值。

2、如何加大comcat连接数

在 tomcat 配置文件 server.xml 中的〈Connector/〉
配置中,和连接数相关的参数有:

minProcessors :最小空闲连接线程数,用于提高系统处理性能,默认 值为10

maxProcessors :最大连接线程数,即:并发处理的最大请求数,默认 值为75

acceptCount :允许的最大连接数,应大于等于maxProcessors,默 认值为100

enableLookups :是否反查域名,取值为:true或false。为了提高处理能 力,应设置为false

connectionTimeout :网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。

web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。

tomcat5中的配置示例:

<Connectorport=H8080H maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" .../>

对于其他端口的侦听配置,以此类推。

3、怎样加大tomcat的内存

首先检查程序有没有限入死循环

这个问题主要还是由这个问题java.lang.OutOfMemoryError:Java heap space引起的。

  1. 设置环境变量

解决方法:手动设置Heap size,修改 TOMCAT_HOME/bin/catalina.sh,setJAVA_0PTS=-Xms32m-Xmx1024m
可以根据自己机器的内存进行更改。

  1. java-Xms32m-Xmx800m className

就是在执行JAVA类文件时加上这个参数,其中className是需要执行的确类名。

4、异常处理
  1. java.lang.OutOfMemoryError:PermGen space

PermGen space 的全称是 Permanent Generation space,是指内存的 永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进 行preco mpile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了 jvm默认的大小(4M)那么就会产生此错误信息了。

解决方法:手动设置MaxPermSize大小,修改TOMCAT_HOME/bin/catalina.sh,在"echo "Using CATALINA_BASE:$CATALINA_BASE"”上面加入以下行:JAVA_OPTS="-server-XX:PermSize=64M-XX:MaxPermSize=256m

建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样 可以达到减少jar文档重复占用内存的目的。

  1. java.lang.OutOfMemoryError:Java heap space

Heap size 设置JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn-Xms-Xmx等选项可进行设置。Heap size 的大小是 Young Generation 和 TenuredGeneraion之和。

提示:在JVM中如果98%的时间是用于GC且可用的Heap size不足2% 的时候将抛出此异常信息。

提示:Heap Size最大不要超过可用物理内存的80%,—般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

解决方法:手动设置Heap size,修改 TOMCAT_HOME/bin/catalina.sh,在"echo"Using CATALINA_BASE:$CATALINA_BASE"”上面加入以下行:JAVA_OPTS="-server-Xms800m-Xmx800m-XX:MaxNewSize=256m"

  1. 1G内存环境下java jvm的参数设置参考:
    JAVA_OPTS="-server-Xms800m-Xmx1024m-XX:PermSize=64M-XX:MaxNewSize=256m-XX:MaxPermSize=128m- Djava.awt.headless=true"

  2. tomcat中如何禁止列目录下的文件

{tomcat_home}/conf/web.xml中,把listings参数设置成false即可, 如下:

<init-param> vparam-name>listingsv/param-name> <param-value>false</param-value> v/init-param>
<init-param> vparam-name>listings</param-name> vparam-value>false</param-value> v/init-param>
5、Tomcat4种部署方式
1. 在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加:`<Context path="/hello" docBase="${projcetPath}" ug="0" privileged="true" />`

2. 将web项目文件件拷贝到webapps目录中。

3. 很灵活,在conf目录中,新建Catalina (注意大小写)。  
   localhost目录,在该目录中新建一个xml文件,名字可以随意取,只要和当前文件中的文件名不重复就行了,该xml文件的内容为:`<Context path="/hello" docBase="${projcetPath}"

debug="0"privileged="true" />`

第3个方法有个优点,可以定义别名。服务器端运行的项目名称为path,外部访问的URL则使用XML的文件名。这个方法很方便的隐藏了项目的名称,对一些项目名称被固定不能更换,但外部访问时又想换 个路径,非常有效。

第2、3还有优点,可以定义一些个性配置,如数据源的配置等。

4. 可以用tomcat在线后台管理器,一般tomcat都打开了,直接上传war 就可以
6、Tomcat的优化经验

Tomcat作为web服务器,它的处理性能直接关系到用户体验,下面是种 常见的优化措施:

  1. 去掉对web.xml的监视,把jsp提前编辑成Servlet。有富余物理内存的情况,加大tomcat使用的jvm的内存。

  2. 服务器资源,服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。

  3. 对于高并发情况下会有大量的运算,那么CPU的速度会直接影响到处理速度。

  4. 内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用-Xmx-Xms-XX:MaxPermSize等参数对内存不同功能块进行划分。我们之前就遇到过内存分配不足,导致虚拟机一直处于full GC ,从而导致处 理能力严重下降。

  5. 硬盘主要问题就是读写性能,当大量文件进行读写时,磁盘极容易成为性能瓶颈。最好的办法还是利用下面提到的缓存。

  6. 利用缓存和压缩。

    对于静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采用了Nginx作为缓存服务器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。另外,为了能加快网络传输速度,开启 gzip压缩也是必不可少的。但考虑到tomcat已经需要处理很多东西了,所以把这个压缩的工作就交给前端的Nginx来完成。

    除了文本可以用gzip压缩,其实很多图片也可以用图像处理工具预先进行压缩,找到一个平衡点可以让画质损失很小而文件可以减小很多。曾经我就见过一个图片从300多kb压缩到几十kb,自己几乎看不出来区别。

  7. 采用集群

    单个服务器性能总是有限的,最好的办法自然是实现横向扩展,那么组建tomcat集群是有效提升性能的手段。我们还是采用了Nginx来作为请求分流的服务器,后端多个tomcat共享session来协同工作。

  8. 优化tomcat参数

    这里以tomcat 7的参数配置为例,需要修改conf/server.xml文件,主要是优 化连接配置,关闭客户端dns查询。

    <Connector port=H8080H
    protocol=uorg.apache.coyote.http11.Http11NioProtocolH connectionTimeout="20000"
    redirectPort="8443"
    maxThreads="500"
    minSpareThreads="20"
    acceptCount="100"
    disableUploadTimeout="true"
    enableLookups="false"
    URIEncoding=HUTF-8H/>
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342