`

内存溢出,tomcat优化

 
阅读更多

今天我的程序出了问题,启动一会儿就没反应了。tomcat日志内存溢出,程序没有错误。

org.apache.coyote.http11.Http11Processor processSEVERE: Error processing request

outofmemory   heap space…..

这个程序已经运行了好几个月了,没有问题,昨天突然出了问题。重启tomcat也修复不了。

查了很久,这种情况只能是请求太多的原因造成的,问了下请求来源,果然增加了几十的请求。

我觉得几十的请求应该对我的程序没有影响的,谁知道就是这几十个请求,造成程序的瘫痪。

因为程序需要处理每秒上千的请求,对tomcat做了一些优化,现在已经修复。

优化的主要是内存和并发连接数,参考了下面的文章

可以对tomcat采用优化措施:

(-)优化线程设置。

当 线程过多机器资源消耗过大,不仅影响性能,严重还会宕机。例如线程达到150左右时服务端会抛出socket资源用尽的错误,你很难再往上加,响应的速度 也变的异常的缓慢,你可以在Tomcat的服务器配置文件中优化一下配置,比如在 server.xml中修改,增加节点数目,可以有效的提高性能:

  <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150"

  minSpareThreads="30" maxSpareThreads="75" enableLookups="false"

  redirectPort="8443" acceptCount="100" connectionTimeout="20000"

  disableUploadTimeout="true" />

适当修改粗、斜字体部分的值,如上的几个参数意义分别为:

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

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

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

minSpareThreads:Tomcat初始化时创建的线程数。

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

对于Connector 8443也有相应的设置,如果同时会用到http与https,应合理分配这两个数据.如果只用到其中的一个,可以将另外一个尽量设置小一点.

(二)优化Java虚拟机内存设置。由此来提高性能

Tomcat默认可以使用的内存为128MB,这点内存可能是不够的,需要调大。

Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件{tomcat_home}/bin/catalina.sh中的set CURRENT_DIR=%cd%前面,增加如下设置:

JAVA_OPTS=-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】

需要把这个两个参数值调大。例如:

JAVA_OPTS=-Xms256m -Xmx512m

这 样,当tomcat线程数增大,但没有超过最大线程数时,平均响应时间会增大,但这不意味着tomcat在线程增多时响应速度变慢.在测试中发现,由于线 程数增多,在请求时需要排队,导致一部分请求会一直排队,随着线程数的增多,排队等待的最大时间也会越来越大,而这些大数据才是导致平均响应时间变大的罪 魁祸首.响应时间大于3s的请求占总请求的比例一直维持在3%-5%.

(三)优化代码,优化程序。

程序代码中的System.out语句会严重影响代码执行的效率,有必要在测试完成之后清除这些垃圾log,或者使用log4j等可配置的日志组件

分享到:
评论

相关推荐

    Tomcat JVM内存优化(Linux环境)

    Linux环境的Tomcat JVM内存优化 java虚拟机内存溢出问题的解决

    tomcat 内存优化

    tomcat内存溢出分析及解决方案,主要是分析tomcat内存溢出原因及对应的解决方案

    tomcat8优化配置.zip

    tomcat8优化配置,jvm 内存溢出,服务器连接效率

    tomcat部署与内存调优

    TOMCAT应用服务器部署与内存调优 1、描述Tomcat应用服务器安装部署。 2、关于TOMCAT内存溢出及适当调整JVM内存大小。

    Tomcat性能优化.docx

    在较大型的应用项目中,默认的内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误“java.lang.OutOfMemoryError: Java heap space”,从而导致客户端显示500错误。

    Tomcat性能优化

    对于使用J2EE 进行开发者而言,在用Tomcat 作为Web 容 器时,或多或少都会遇到系统运行缓慢、Tomcat 内存溢出等问 题。为了避免生产模式中出现的这些问题,在实际应用中探索出了一些对Tomcat 优化技术

    tomcat的参数配置

    tomcat的参数配置,内存优化,启动更快和性能更好,保证运行不会内存溢出。推荐下载

    Java-JVM优化视频.zip

    4 jmap的使用以及内存溢出分析 5 实战:内存溢出的定位与分析 6 jstack的使用 7 VisualVM工具的使用 day2: 1 什么是垃圾回收 2 垃圾回收的常见算法 3 垃圾收集器以及内存分配 4 可视化GC日志分析工具 day3: 1 ...

    JVM优化|java虚拟机优化

    - 掌握定位分析内存溢出的方法 - 掌握jstack命令的使用 - 掌握VisualJVM工具的使用 - 了解什么是垃圾回收 - 掌握垃圾会回收的常见算法 - 学习串行、并行、并发、G1垃圾收集器 - 学习GC日志的可视化查看 - Tomcat8的...

    tomcat架构解析

    在日常应用中时常由于内存不足、堆栈溢出导致项目宕机。都是由于对web容器的认知不足,本书基于Tomcat 8.5.6全面介绍了Tomcat的架构、各组件的实现方案以及使用方式,主要包括Tomcat的基础组件架构以及工作原理,...

    从源码的角度探索Java中间件-Tomcat & Jetty的深度反汇编

    弄懂了Tomcat和Jetty的原理,JavaWeb开发对你来说就毫无秘密可言。...Tomcat的内存溢出原因分析及调优 Tomcat拒绝连接原因分析及网络优化 Tomcat进程占用CPU过高怎么办 谈谈Jetty性能调优的思路 热点问题答疑5

    Java虚拟机

    第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。第三部分...

    JVM笔记资料压缩文件

    jvm笔记 1、jvm总体架构.pdf ...4、有关内存溢出和内存泄漏的知识点.pdf 5、jvm里的垃圾回收机制.pdf 6、jvm优化知识点升级和配置总结.pdf 7、Tomcat调优实战.pdf 8、动态查看JVM内存的工具.pdf

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    第2章 Java内存区域与内存溢出异常 / 24 2.1 概述 / 24 2.2 运行时数据区域 / 25 2.2.1 程序计数器 / 25 2.2.2 Java虚拟机栈 / 26 2.2.3 本地方法栈 / 27 2.2.4 Java堆 / 27 2.2.5 方法区 / 28 2.2.6 运行...

    论代码级性能优化变迁之路(二)

    在实际生产环境中,服务器经常出现内存溢出和CPU时间被占满。程序开发的过程中,考虑不全面,容错很差,经常因为一个小bug而导致服务不可用。程序中没有打印关键日志,或者打印了日志,信息却是无用信息没有任何参考...

    超级有影响力霸气的Java面试题大全文档

    比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 19、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 ...

    java 面试题 总结

    比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 ...

Global site tag (gtag.js) - Google Analytics