阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Tomcat7优化配置

250次阅读
没有评论

共计 3854 个字符,预计需要花费 10 分钟才能阅读完成。

导读 Tomcat 在使用的过程中会遇到很多报错,有些是程序的报错,但还有一部分是 tomcat 本身的报错,我们可以通过优化 tomcat 的初始配置来提高 tomcat 的性能。Tomcat 的优化主要体现在两方面:内存、并发连接数。

1、内存优化:

优化内存,主要是在 bin/catalina.bat 或 bin/catalina.sh 配置文件中进行。linux 上,在 catalina.sh 中添加:

JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m -XX:PermSize=128M -XX:MaxPermSize=256M"

其中:

• -server:启用 jdk 的 server 版本。• -Xms:虚拟机初始化时的最小堆内存。• -Xmx:虚拟机可使用的最大堆内存。#-Xms 与 -Xmx 设成一样的值,避免 JVM 因为频繁的 GC 导致性能大起大落
• -XX:PermSize:设置非堆内存初始值, 默认是物理内存的 1 /64。• -XX:MaxNewSize:新生代占整个堆内存的最大值。• -XX:MaxPermSize:Perm(俗称方法区)占整个堆内存的最大值,也称内存最大永久保留区域。

1)错误提示:java.lang.OutOfMemoryError:Java heap space

Tomcat 默认可以使用的内存为 128MB,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行。常见的问题是报 Tomcat 内存溢出错误,Outof Memory(系统内存不足)的异常,从而导致客户端显示 500 错误,一般调整 Tomcat 的 -Xms 和 -Xmx 即可解决问题,通常将 -Xms 和 -Xmx 设置成一样,堆的最大值设置为物理可用内存的最大值的 80%。

set JAVA_OPTS=-Xms512m-Xmx512m

2)错误提示:java.lang.OutOfMemoryError: PermGenspace

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

setJAVA_OPTS=-XX:PermSize=128M

3)在使用 -Xms 和 -Xmx 调整 tomcat 的堆大小时,还需要考虑垃圾回收机制。如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过 3 -5 秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详细输出,研究垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的 80% 作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。

2、连接数优化:

# 优化连接数,主要是在 conf/server.xml 配置文件中进行修改。

2.1、优化线程数

找到 Connectorport=”8080″ protocol=”HTTP/1.1″,增加 maxThreads 和 acceptCount 属性(使 acceptCount 大于等于 maxThreads),如下:

<Connectorport="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />

其中:

• maxThreads:tomcat 可用于请求处理的最大线程数,默认是 200
• minSpareThreads:tomcat 初始线程数,即最小空闲线程数
• maxSpareThreads:tomcat 最大空闲线程数,超过的会被关闭
• acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理. 默认 100
2.2、使用线程池

在 server.xml 中增加 executor 节点,然后配置 connector 的 executor 属性,如下:

<Executorname="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/>
<Connectorport="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>

其中:

• namePrefix:线程池中线程的命名前缀
• maxThreads:线程池的最大线程数
• minSpareThreads:线程池的最小空闲线程数
• maxIdleTime:超过最小空闲线程数时,多的线程会等待这个时间长度,然后关闭
• threadPriority:线程优先级

注:当 tomcat 并发用户量大的时候,单个 jvm 进程确实可能打开过多的文件句柄,这时会报 java.net.SocketException:Too many open files 错误。可使用下面步骤检查:

• ps -ef |grep tomcat 查看 tomcat 的进程 ID,记录 ID 号,假设进程 ID 为 10001
• lsof -p 10001|wc -l 查看当前进程 id 为 10001 的 文件操作数
• 使用命令:ulimit -a 查看每个用户允许打开的最大文件数
3、Tomcat Connector 三种运行模式(BIO, NIO, APR)
3.1、三种模式比较:

1)BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7 或以下在 Linux 系统中默认使用这种方式。

2)NIO:利用 Java 的异步 IO 处理,可以通过少量的线程处理大量的请求。Tomcat8 在 Linux 系统中默认使用这种方式。Tomcat7 必须修改 Connector 配置来启动(conf/server.xml 配置文件):

<Connectorport="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"redirectPort="8443"/>

3)APR(Apache Portable Runtime):从操作系统层面解决 io 阻塞问题。Linux 如果安装了 apr 和 native,Tomcat 直接启动就支持 apr。

3.2、apr 模式

安装 apr 以及 tomcat-native

yum -y install apr apr-devel

进入 tomcat/bin 目录,比如:

cd /opt/local/tomcat/bin/
tar xzfv tomcat-native.tar.gz
cd tomcat-native-1.1.32-src/jni/native
./configure --with-apr=/usr/bin/apr-1-config
make && make install

#注意最新版本的 tomcat 自带 tomcat-native.war.gz,不过其版本相对于 yum 安装的 apr 过高,configure 的时候会报错。

解决:yum remove apr apr-devel –y, 卸载 yum 安装的 apr 和 apr-devel, 下载最新版本的 apr 源码包,编译安装; 或者下载低版本的 tomcat-native 编译安装

安装成功后还需要对 tomcat 设置环境变量,方法是在 catalina.sh 文件中增加 1 行:

CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"

#apr 下载地址:http://apr.apache.org/download.cgi

#tomcat-native 下载地址:http://tomcat.apache.org/download-native.cgi

修改 8080 端对应的 conf/server.xml

protocol=”org.apache.coyote.http11.Http11AprProtocol”

<Connector executor="tomcatThreadPool"
port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
enableLookups="false"
redirectPort="8443"
URIEncoding="UTF-8" />

PS: 启动以后查看日志 显示如下表示开启 apr 模式

Sep 19, 2016 3:46:21 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-apr-8081"]

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计3854字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7806500
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...