Linux下配置tomcat+apr+native应对高并发
摘要:在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待。但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,这时并发的线程数量明显下降,从原来的300可能会马上下降到只有几十,新的请求会毫无阻塞的进来。
一、三种运行模式介绍
Tomcat 有三种(bio,nio.apr) 运行模式,首先来简单介绍下
bio
bio(blocking I/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。Tomcat在默认情况下,就是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。
nio
是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。
想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为
<Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="8443" />
apr
(Apache Portable Runtime/Apache可移植运行库),是Apache HTTP服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。
要tomcat支持apr,必须要安装apr和native,这样tomcat可以利用apache的apr接口,使用操作系统的部分本地操作,从而提升性能。
Tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。
接下来介绍linux下tomcat+apr+native配置
二、linux下配置tomcat+apr+native
2.1 安装包准备
jdk-7u76-linux-x64.tar.gz(必须JDK1.7以上才支持apr)
apr-1.5.2.tar.gz
apr-util-1.5.4.tar.gz
apache-tomcat-7.0.56.tar.gz(解压之后其bin目录下包含tomcat-native的安装包)
2.2 安装JDK
这是运行Tomcat的首要环境,所以这一步最先执行。
2.2.1 解压
tar -zxvf jdk-7u76-linux-x64.tar.gz
2.2.2 创建/usr/local/java文件夹
mkdir -p /usr/local/java
2.2.3 移动到/usr/local/java
mv jdk1..0_76 /usr/local/java
2.2.4 添加环境变量
vi /etc/profile
再最后添加上
#jdk1.
export JAVA_HOME=/usr/local/java/jdk1..0_76
export CLASSPATH=$JAVA_HOME/lib/
export PATH=/usr/local/ruby/bin:$PATH:$JAVA_HOME/bin
2.2.5 重启环境变量,使配置生效
source /etc/profile
查看是否生效

出现以下字样则表示安装成功,接下来安装tomcat
2.3 安装tomcat
2.3.1 解压tomcat
tar -zxvf apache-tomcat-7.0..tar.gz
2.3.2 改名为tomcat7
mv apache-tomcat-7.0. tomcat7
2.3.3 修改tomcat内存(jvm内存)
我这里tomcat是放在/home目录下
vi /home/tomcat7/bin/catalina.sh
在里面添加
JAVA_OPTS="-server -Xms1024M -Xmx1024M -XX:PermSize=512M -XX:MaxNewSize=512M -XX:MaxPermSize=512M"
2.3.4 修改运行模式
vi /home/tomcat7/conf/server.xml
添加上
<!-- 配置apr -->
<Connector executor="tomcatThreadPool"
port="" protocol="org.apache.coyote.http11.Http11AprProtocol"
URIEncoding="UTF-8" enableLookups="false" acceptCount=""
connectionTimeout="" maxKeepAliveRequests=""
redirectPort="" />
下面贴出一个server.xml完整的配置
<?xml version='1.0' encoding='utf-8'?> <Server port="9016" shutdown="SHUTDOWN"> <!--关闭https安全验证 -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
<Listener className="org.apache.catalina.core.JasperListener" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources> <Service name="Catalina"> <!--The connectors can use a shared executor, you can define one or more named thread pools-->
<!-- 配置线程 -->
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="25"
maxIdleTime="4000"
/> <!-- 配置apr -->
<Connector executor="tomcatThreadPool"
port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
URIEncoding="UTF-8" enableLookups="false" acceptCount="50"
connectionTimeout="1000" maxKeepAliveRequests="250"
redirectPort="8443" /> <Connector port="9109" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm> <Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"> <!-- 配置访问日志格式 -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" /> </Host>
</Engine>
</Service>
</Server>
2.4 安装tomcat-native
2.4.1 进入到/home/tomcat7/bin/
cd /home/tomcat7/bin
2.4.2 解压tomcat-native.tar.gz
tar -zxvf tomcat-native.tar.gz
2.4.3 进入到解压后的目录
cd tomcat-native-1.1.-src/jni/native
2.4.4 检测、编译、安装
./configure --with-apr=/usr/local/apr/bin/apr--config --with-java-home=/usr/local/java/jdk1..0_76 && make && make install
2.5 安装apr
需要安装apr-1.5.2.tar.gz和apr-util-1.5.4.tar.gz
2.5.1 解压apr-1.5.2.tar.gz和apr-util-1.5.4.tar.gz
tar -zxvf apr-1.5..tar.gz
tar -zxvf apr-util-1.5..tar.gz
2.5.2 检测、编译、安装
./configure --prefix=/usr/local/apr && make && make install
./configure --with-apr=/usr/local/apr/ --prefix=/usr/local/apr-utils && make && make install
2.6 修改最大文件句柄数和打开文件的数目
由于打开文件会比较多,所以要考虑修改默认打开文件数目
2.6.1 修改/etc/sysctl.conf
net.ipv4.ip_local_port_range =
net.ipv4.ip_nonlocal_bind =
2.6.2 在/etc/security/limits.conf最后增加如下两行记录
* soft nofile
* hard nofile
2.6.3 加载bridge模块
modprobe bridge
2.6.4 重新载入sysctl,使其改变生效
sysctl -p
2.6.5 再退出重新登陆,用ulimit -a查看

可以看到open files已经由默认的1024变成了65535
2.7 启动tomcat
/home/tomcat7/bin/startup.sh
出现以下提示则表示配置成功

三、出错情况处理
3.1、启动tomcat时报“The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/local/apr/lib”
Linux下配置tomcat+apr+native应对高并发的更多相关文章
- (转)Linux下配置tomcat+apr+native应对高并发
摘要:在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服 ...
- linux下配置tomcat集群的负载均衡
linux下配置tomcat集群的负载均衡 一.首先了解下与集群相关的几个概念集群:集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台.在客户端看来,一个集群就象是一个服 ...
- Linux下配置Tomcat服务器
Linux下配置Tomcat服务器和Windows下其实差不多,可以去官网下载安装包释放或者在线下载,只是当时下载的windows.zip文件,现在下载.tar.gz格式的即可,下面使用命令行的方式安 ...
- linux下配置tomcat开机自启动
Linux下配置tomcat开机自启动 1.写一个tomcat脚本,内容如下,设置其权限为755,放在/etc/init.d/目录下 #!/bin/bash## /etc/init.d/tomca ...
- Linux 下配置Tomcat的虚拟路径
如果你的Linux服务器下,不止一个tomcat的时候,这个时候,你就会发现,每次去发布项目很麻烦,还需要到webapps下面去看,繁琐的很,这里就用到了,Tomcat的虚拟路径,制定一个目录,作为t ...
- 使用Java Service Wrapper在Linux下配置Tomcat应用
前言 Java Service Wrapper是Tanuki Software的一个产品,可以将Java应用注册成Windows或Linux服务,使其可以随系统开机启动,同时可以监控Java应用的状态 ...
- linux下配置Tomcat开机启动
我们在linux下安装好tomcat之后:经常是需要配置到开机启动的: 这样的话就不需要我们每次重启linux服务器之后自己在登陆运行startup.sh文件启动tomcat了 本次的演示环境是在ce ...
- Linux下配置tomcat
我们可以在用户目录下新建一个tomcat目录 mkdir tomcat ls cd tomcat/ 使用wget命令下载tomcat的压缩包 wget https://downloads.apache ...
- linux下JDK,tomcat的安装与环境变量配置
先从网上下载jdk(jdk-1_5_0_02-linux-i586.rpm) ,下载后放在/home目录中,当然其它地方也行. 进入安装目录#cd /home#cp jdk-1_5_0_02-linu ...
随机推荐
- AJAX的简单梳理
一.Ajax的简介 Ajax,异步JavaScript和XML,异步提交,无刷新技术,局部刷新技术 1)传统的客户端与服务器端交互的模式 客户端发送请求直接给服务端,服务接受到请求后进行逻辑运算,最终 ...
- 计算facebook sdk需要的key hashes
1. 下载openssl,在C盘创建openssl文件夹,解压下载的zip到openssl文件夹. 2. 找到debug.keystore. windows下在C:\Users\用户名\.androi ...
- 看透SpringMVC源代码分析与实践 Markdown记录
kantouspringmvc 看透SpringMVC中文版电子书,使用Markdown语法记录学习<看透SpringMVC>的内容,方便自己整理知识,并在原作者写作的基础上添加自己的理解 ...
- C语言习题1.分别统计一下其中字母,数字,其他字符的个数。将统计的字母,数字,其他字符的个数以柱状图的形式打印
从键盘上输入字符,(1)分别统计一下其中字母,数字,其他字符的个数, (2)将统计的字母,数字,其他字符的个数以柱状图的形式打印.例如 5 ***** ***** 3 ***** **** ...
- python+unittest框架整理(一点点学习前辈们的封装思路,一点点成长。。。)
预期框架整理目标: 1.单个用例维护在单个.py文件中可单个执行,也可批量生成组件批量执行 2.对定位参数,定位方法,业务功能脚本,用例脚本,用例批量执行脚本,常用常量进行分层独立,各自维护在单独的. ...
- ReactNative学习之Html基础
前言: React Native开发作为一种新型的移动开发方式,个人觉得App的一部分需求会逐步替换成这种方式,也是公司移动开发人员所必须掌握的一种开发技术,所以鉴于这种情况我觉得很有必要学习一下,特 ...
- Adobe After Effects 2017-14.0安装教程
Adobe After Effects 2017-14.0安装教程 第一步:首先请将电脑的网络断开,很简单:禁用本地连接或者拔掉网线,这样就可以免除登录Creative Cloud帐号,安装更方便快捷 ...
- Java之枚举----小试牛刀练习
1.定义一个电脑品牌枚举类,其中只有固定的几个电脑品牌. 1.1简单枚举类,不设置属性和方法 package 第十四章枚举; public enum Brand { Lenovo,Dell,Accer ...
- Java异常类(Throwable)
一.异常类体系 二.异常类由来与定义 [异常类的由来]:Java把程序在运行时出现的各种不正常情况也看成了对象, 提取属性和行为进行描述,比如异常名称,异常信息,异常发生位置,从而形成了各种异常类 [ ...
- 在Visual Studio for Mac中使用fastlane管理iOS的provision
Xamarin开发中,最烦的就是provision的管理了. 全手工的话,要先创建一个key,上传后生成cert文件,再创建provision.如果在手机上调试,还要把手机加到provision中去. ...