`
duanfei
  • 浏览: 733574 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Tomcat性能优化

阅读更多
1.分配给Tomcat足够大的内存空间。


      压解版本中

文件位置      :bin\catalina.bat

      这里增加了   :
set JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m


      以下是这条命令在catalina.bat文件中的位置:

    rem $Id: catalina.bat 656834 2008-05-15 21:04:04Z markt $

    rem ---------------------------------------------------------------------------

   
set JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m

    rem Guess CATALINA_HOME if not defined


      可以在catalina.bat文件最后加上一条命令:echo %JAVA_OPTS%>d:\JAVA_OPTS.log


      安装版本中:

可以执行Apache Tomcat 6 Properties配置管理工具。

进入Java面板后设置相关的Java参数:

Java Options:加入

-XX:PermSize=128M

-XX:MaxNewSize=256m

-XX:MaxPermSize=256m


Initial memory pool        :256               MB

Maximum memory pool :1024             MB

Thread stack size          :1024             KB


2.设置Tomcat连接器相关参数。


<Connector

executor="tomcatThreadPool"

port="8090"

redirectPort="8443"

protocol="org.apache.coyote.http11.Http11NioProtocol"

compression="on"

compressionMinSize="2048"

enableLookups="false"

acceptCount="1000"

URIEncoding="UTF-8"

connectionTimeout="40000" />



连接器使用的线程池的名子:executor="tomcatThreadPool"

连接器端口                        :port="8090"

连接器使用的传输方式      :protocol="org.apache.coyote.http11.Http11NioProtocol"

传输时是否支持压缩          :compression="on"

压缩的大小                        :compressionMinSize="2048"



3.设置Tomcat连接器池。

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
        maxThreads="800" minSpareThreads="400" maxSpareThreads="700"/>


      线程池名:           name="tomcatThreadPool"

      线程前缀:           namePrefix="catalina-exec-"

      最大产生线程数:maxThreads="800"

      最小初始现程数:minSpareThreads="400"

      最大初始现程数:minSpareThreads="700"

4.开启Tomcat6的Nio机制。

protocol="org.apache.coyote.http11.Http11NioProtocol"



5.设置Tomcat安全相关。



      设置:\apache-tomcat-6.0.18\conf\web.xml

       
<init-param>

            <param-name>listings</param-name>

            <param-value>false</param-value>

        </init-param>



      设置Manager用户名和密码

      文件位置:
D:\apache-tomcat-6.0.18\conf\ tomcat-users.xml      

      <?xml version='1.0' encoding='utf-8'?>

<tomcat-users>

<role rolename="manager"/>

<user username="temobi" password="temobi8090" roles="manager"/>

</tomcat-users>




使用ab工具简单测试Tomcat并发。

1. JVM

1.1. 使用 Server JRE 替代JDK。

服务器上不要安装JDK,请使用 Server JRE. 服务器上根本不需要编译器,代码应该在Release服务器上完成编译打包工作。

理由:一旦服务器被控制,可以防止在其服务器上编译其他恶意代码并植入到你的程序中。

1.2. JAVA_OPTS
export JAVA_OPTS="-server -Xms512m -Xmx4096m  -XX:PermSize=64M -XX:MaxPermSize=512m"

-Xms 指定初始化时化的栈内存

-Xmx 指定最大栈内存


2. Tomcat 优化

2.1. maxThreads 连接数限制
maxThreads 是 Tomcat 所能接受最大连接数。一般设置不要超过8000以上,如果你的网站访问量非常大可能使用运行多个Tomcat实例的方法。
即,在一个服务器上启动多个tomcat然后做负载均衡处理。
<Connector port="8080" address="localhost"
	maxThreads="2048" maxHttpHeaderSize="8192"
	emptySessionPath="true" protocol="HTTP/1.1"
	enableLookups="false" redirectPort="8181" acceptCount="100"
	connectionTimeout="20000" disableUploadTimeout="true" />



提示

很多做过php运维的朋友在这里会犯一个大错误,php优化服务器通常怎做法是安装cpu以及内存的情况配置连接数,连接数过万都很正常,但java不同jvm配置要非常小心,稍有差错就会崩溃。

maxThreads 配置要结合 JVM -Xmx 参数调整,也就是要考虑内存开销。



2.2. 虚拟主机

不要使用Tomcat的虚拟主机,每个站点一个实例。即,启动多个tomcat.

这也是PHP运维在这里常犯的错误,PHP的做法是一个Web下面放置多个虚拟主机,而不是每个主机启动一个web服务器。Tomcat 是多线程,共享内存,任何一个虚拟主机中的应用出现崩溃,会影响到所有应用程序。采用多个实例方式虽然开销比较大,但保证了应用程序隔离与安全。



2.3. 压错传输

通常所说的gzip压缩,Tomcat通过在server.xml配置设置压缩的选项。
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               compression="on"
               compressionMinSize1="2048"
               noCompressionUserAgents="gozilla, traviata"
               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,,application/octet-stream"/>


提示

压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做。



3. Tomcat 安全配置



3.1. 安装后初始化配置

当Tomcat完成安装后你首先要做的事情如下:

首次安装完成后立即删除webapps下面的所有代码
rm -rf /srv/apache-tomcat/webapps/*


注释或删除 tomcat-users.xml 所有用户权限,看上去如下:
# cat conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
</tomcat-users>


隐藏Tomcat版本信息
vim $CATALINA_HOME/conf/server.xml

    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
				maxThreads="8192"
				minSpareThreads="64"
				maxSpareThreads="128"
				acceptCount="128"
				enableLookups="false"
                server="Neo App Srv 1.0"/>



# curl -I http://localhost:8080/
HTTP/1.1 400 Bad Request
Transfer-Encoding: chunked
Date: Thu, 20 Oct 2011 09:51:55 GMT
Connection: close
Server: Neo App Srv 1.0



服务器信息已经被改为 Server: Neo App Srv 1.0



3.2. 启动用户与端口

不要使用root用户启动tomcat,Java程序与C程序不同。nginx,httpd 使用root用户启动守护80端口,子进程/线程会通过setuid(),setgid()两个函数切换到普通用户。即父进程所有者是root用户,子进程与多线程所有者是一个非root用户,这个用户没有shell,无法通过ssh与控制台登陆系统,Java 的JVM 是与系统无关的,是建立在OS之上的,你使用什么用户启动Tomcat,那麽Tomcat 就会继承该所有者的权限。

这造成了一个问题,Linux系统小于1024的端口只有root可以使用,这也是为什么Tomcat默认端口是8080。如果你想使用80端口只能使用root启动Tomcat。这有带来了很多安全问题。

解决方案是创建一个不同用户,如:

groupadd -g 80 daemon
adduser -o --home /daemon --shell /sbin/nologin --uid 80 --gid 80 -c "Web Server" daemon



注意 /sbin/nologin , 意味着该用户不能登录,同时我也没有给它指定密码,这个用户只能用于启动tomcat
chown daemon:daemon -R /srv/*
su - daemon -c "/srv/apache-tomcat/bin/startup.sh"

接下来解决80端口问题, 思路就是80去调用8080,或者映射端口。

下面是影射方案,80 跳转 8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080


取消跳转
iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080


查看规则
iptables -t nat -L

另一个就是从80请求去调用8080的方案

这个方案可以在 Tomcat 前段增加反向代理,例如:Nginx,Apache,Squid,Varnish或者F5, Array这类设备等等



3.3. 应用程序安全

关闭war自动部署 unpackWARs="false" autoDeploy="false"。防止被植入木马等恶意程序

应用程序部署与tomcat启动,不能使用同一个用户。

我的tomcat 安装在 /srv目录下,Tomcat启动用户为daemon; 应用程序放在/www目录下www所有者是www用户。这样的目的是一旦tomcat被植入web shell程序,它将不能创建或编辑/www目录下面的任何内容。
adduser --home /www -c "Web Application" www


3.4. JSESSIONID

修改 Cookie 变量 JSESSIONID, 这个cookie 是用于维持Session关系。建议你改为PHPSESSID
分享到:
评论

相关推荐

    Tomcat性能优化.rar

    《深入探讨:Tomcat性能优化》 在Java Web开发领域,Tomcat作为一款广泛应用的开源Servlet容器,其性能优化对于提升整个Web应用的响应速度和处理能力至关重要。本篇文章将全面解析Tomcat性能优化的各个方面,帮助...

    tomcat性能优化.pdf

    配置优化是Tomcat性能优化的第一步,也是最基础的一步。首先,应该选择合适的Tomcat版本进行部署。当前版本的Tomcat,如Tomcat 9,性能更高且更稳定。部署时,应禁用ajp协议,因为在8.5.51之前的版本默认开启,但...

    tomcat性能优化

    Tomcat性能优化 Tomcat 是一个流行的 Java Web 服务器,它的性能优化对网站的并发能力有着至关重要的影响。在本文中,我们将讨论 Tomcat 的性能优化方法,以提高网站的并发能力。 一、目的 通过优化 Tomcat,提高...

    tomcat性能优化,调优

    Tomcat性能优化与调优 Tomcat性能优化是指通过调整Tomcat服务器的配置和虚拟机参数,以提高Tomcat服务器的性能和可扩展性。Tomcat服务器的性能优化可以分为两类:外部环境调优和自身调优。 外部环境调优是指调整...

    Tomcat性能优化笔记

    【Tomcat性能优化笔记】 Tomcat作为一款广泛应用的开源Java Servlet容器,其性能优化对于提升Web应用的整体效能至关重要。优化工作主要分为两大部分:外部环境调整和Tomcat自身的配置优化。 1. **外部环境优化** ...

    Tomcat性能优化及JVM内存工作原理

    Tomcat性能优化及JVM内存工作原理 Tomcat性能优化是指通过调整Tomcat服务器的配置和JVM的参数,以提高Tomcat服务器的性能和响应速度。Tomcat性能优化主要包括代码层优化、JVM内存优化和应用配置优化三方面。 代码...

    Tomcat性能优化.docx

    【Tomcat性能优化】 在大型应用项目中,Tomcat的默认内存配置往往不足以应对复杂的运行需求,这可能导致系统出现各种问题。最常见的问题之一是“java.lang.OutOfMemoryError: Java heap space”错误,这是由于Java...

    04-Tomcat性能优化1

    总的来说,Tomcat性能优化涵盖了从底层架构选择(如NIO)、服务器配置调整(如`server.xml`和`web.xml`)、到框架级别的定制化(如SpringBoot的`TomcatContextCustomizer`和`TomcatConnectorCustomizer`)。...

    Tomcat7性能优化

    ### Tomcat7性能优化策略详解 #### 一、引言 在现代Web应用开发中,Tomcat作为一款广泛使用的开源...希望这些方法能够帮助开发者们更好地理解和掌握Tomcat性能优化的关键技术,从而为用户提供更加稳定高效的Web服务。

    tomcat性能优化指南

    《Tomcat性能优化指南》 在Java Web应用领域,Tomcat作为一款轻量级的应用服务器,因其开源、免费、小巧且高效的特点,被广泛应用。然而,随着应用规模的扩大和用户数量的增长,如何进行Tomcat的性能优化,提高其...

    Tomcat性能优化配置

    Tomcat性能优化配置

    Tomcat性能优化1

    Tomcat性能优化是一个关键的议题,尤其是在高并发和大数据量的场景下,优化能够显著提升应用的响应速度和系统整体的稳定性。本文将深入探讨如何通过调整Tomcat的Java虚拟机参数以及服务器参数来实现性能优化。 首先...

    Tomcat性能优化篇笔记.pdf

    ### Tomcat性能优化篇知识点详解 #### 一、Tomcat启动流程分析 1. **ContainerBase.startInternal()方法** - `ContainerBase`是Tomcat中容器类的基础类,负责处理容器的生命周期管理,如启动、停止等操作。 - 在...

    tomcat性能优化方案

    ### Tomcat性能优化方案 在IT领域中,Tomcat作为一款广泛使用的开源Servlet容器,其性能直接影响着基于Java的应用程序的运行效率与用户体验。本文将详细介绍如何通过一系列配置与优化措施来提升Tomcat服务器的整体...

Global site tag (gtag.js) - Google Analytics