Linux下配置tomcat+apr+native应对高并发
一、三种运行模式介绍
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.7.0_76 /usr/local/java
2.2.4 添加环境变量
vi /etc/profile
再最后添加上
#jdk1.7export JAVA_HOME=/usr/local/java/jdk1.7.0_76export 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.56.tar.gz
2.3.2 改名为tomcat7
mv apache-tomcat-7.0.56 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="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" URIEncoding="UTF-8" enableLookups="false" acceptCount="50" connectionTimeout="1000" maxKeepAliveRequests="250" redirectPort="8443" />
下面贴出一个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.31-src/jni/native
2.4.4 检测、编译、安装
./configure --with-apr=/usr/local/apr/bin/apr-1-config --with-java-home=/usr/local/java/jdk1.7.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.2.tar.gztar -zxvf apr-util-1.5.4.tar.gz
2.5.2 检测、编译、安装
进入到apr-1.5.2,执行
./configure --prefix=/usr/local/apr && make && make install
进入到apr-util-1.5.4,执行
./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 = 10240 65535net.ipv4.ip_nonlocal_bind = 1
2.6.2 在/etc/security/limits.conf最后增加如下两行记录
* soft nofile 65535 * hard nofile 65535
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”
解决方案:确保tomcat-native安装成功,否则执行上面2.5,如果依旧不成功,请执行下面步骤
#vi /opt/tomcat_api_8035/bin/catalina.sh
CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
3.2、安装apr时报‘Neither the JAVA_HOME nor the JRE_HOME environment variable is defined“
解决方案:这是未设置环境JAVA_HOME与JAVA_JRE目录,请确保安装jdk成功,确认/etc/profile环境变量配置正确
3.3、在执行sysctl -p的时候发现输出出现以下错误
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
转载于:https://blog.51cto.com/13013670/1944025
Linux下配置tomcat+apr+native应对高并发相关推荐
- linux下配置tomcat、resin
一.tomcat安装配置 1. 什么是tomcat Tomcat就是用来解析jsp程序的一个软件:web容器: Tomcat是Apache 软件基金会(Apache Software Foundati ...
- linux安装toncat环境变量,linux下JDK,tomcat的安装与环境变量配置
先从网上下载jdk(jdk-1_5_0_02-linux-i586.rpm) ,下载后放在/home目录中,当然其它地方也行. 进入安装目录 #cd /home #cp jdk-1_5_0_02-li ...
- linux 程序定时重启tomcat,linux下实现tomcat定时自动重启
tomcat自带的脚本中没有提供直接restart的模式,但是有start和shutdown两种模式.要实现restart模式,实际上只需要判断是否已经启动tomcat,若已经启动则限制性shutdo ...
- linux tomcat 安装教程,关于Linux下配置安装Tomcat8的步骤
由于Centos6即将停止更新,本次就使用Centos7.5 X64位系统来演示,Tomcat版本就使用8.5,如果想使用9.0的版本也可以去官网进行下载,步骤都大同小异. 关于Tomcat9的新特性 ...
- linux tomcat 配置启动命令,# linux 之 配置tomcat开机自启动(systemctl)
前言: systemctl命令是service和chkconfig命令的集合 service命令:用于启动.停止.重新启动和关闭系统服务,还可以显示所有系统服务的当前状态 chkconfig命令:用于 ...
- linux下的Tomcat启动
linux下的Tomcat启动 一直在eclipse中启动Tomcat,只有第一次安装Tomcat时亲自启动过一次,那时用的还是Win10,看书看到了Tomcat的配置,于是想实践一下,打开tomca ...
- linux下tomcat部署java web项目_在linux下用tomcat部署java web项目的过程与注意事项
在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...
- Linux 下Nginx+Tomcat 完美整合 nginx tomcat 整合方式
Linux 下Nginx+Tomcat 完美整合 nginx tomcat 整合方式 随着IT行业的不断发展,个人.企业应用对网站的性能也不断的提高,从以前的apache+tomcat整合.weblo ...
- 在linux下配置网桥透明模式防火墙
在linux下配置网桥透明模式防火墙 一.透明模式防火墙与透明代理的概念 一般而言,防火墙的两个网络接口应分属两个不同的网络,根据系统管理员定义的访问规则在两个接口之间转发数据包,或者拒绝 ...
最新文章
- Windows程序设计学习笔记(1):一个简单的windows程序
- UA MATH566 统计理论 截断数据
- pycharm 修改新建文件时的头部模板
- 1039 Course List for Student (25 分)_33行代码AC
- [方法“Boolean Contains(System.Guid)”不支持转换为 SQL]的解决办法
- mac远程redis_Linux:使用Mac远程(局域网内)访问Ubuntu主机上的Redis服务
- 马上开课 | 临床基因组学数据分析实战助力解析Case,快速发表文章
- MySQL怎样存储IP地址
- c语言数组统计条形图,【D3.js数据可视化系列教程】--(十)更自由的条形图
- Mysql学习总结(43)——MySQL主从复制详细配置
- html+javascript实现数字微调,点击一下增加1或减去1
- 一 对国家出路的早期探索
- UART串口通信协议详解
- 汉诺塔python创新设计_递归经典案例汉诺塔 python实现
- OCM_第二天课程:Section1 —》配置 Oracle 网络环境
- 客户端与服务器相关概念
- 字符串关键字的散列映射
- 《大道至简》的幕后故事(3):“愚公移山记”事物篇
- 从专业角度说说修仙游戏应该怎么做
- 陆奇终于自立门户!YC撤离中国,陆奇成立新基金接盘
热门文章
- Android18isalone,全新JAVA开发Android程序员需要掌握的英语单词(很全).doc
- zynqNet整体思路框架
- 嵌入式linux mono,嵌入式linux/android alsa_aplay alsa_amixer命令行用法(示例代码)
- 怎么看生辰八字中五行缺什么
- 架构师最怕程序员知道的十件事
- spring的view
- Production Hair Rendering in RenderMan
- 一个自定义类型的运算符重载的例子
- SpringBoot Cache操作
- 置顶java[常用]-[语法]-[基础操作]