转载 tomcat linux 下, tomcat假死的解决办法,另:manager开启,在centos7巨慢问题,war部署在根目录

服务器配置:linux+tomcat

现象:Linux服务器没有崩,有浏览器中访问页面,出现无法访问的情况,没有报4xx或5xx错误(假死),并且重启tomcat后,恢复正常。

原因:tomcat默认最大连接数(线程数)200个,默认每一个连接的生命周期2小时(7200秒),tomcat使用http 1.1协议,而http1.1默认是长连接。tomcat接受处理完请求后,socket没有主动关闭,因此如果在2小时内,请求数超过200个,服务器就会出现上述假死现象。

解决方案1:及时断开socket

解决方案2:修改tomcat配置文件,修改最大连接数(增大)

 

修改server.xml配置文件,Connector节点中增加acceptCount和maxThreads这两个属性的值,并且使acceptCount大于等于maxThreads:

<Connector port="8080" protocol="HTTP/1.1"

            connectionTimeout="20000"  

           redirectPort="8443" acceptCount="500" maxThreads="400" />

解决方案3:修改linux的TCP超时时间(socket生命周期)限制

1
2
3
4
5
6
7
8
9
10
11
12
vi /etc/sysctl.conf
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 30
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# 探测次数
net.ipv4.tcp_keepalive_probes=2
# 探测间隔秒数
net.ipv4.tcp_keepalive_intvl=2
 
编辑完 /etc/sysctl.conf,要重启network 才会生效
[root@temp /]# /etc/rc.d/init.d/network restart

参考:

http://zhidao.baidu.com/link?url=XEFvQIHJ6Udt1UZi_3AAULeMamp73igRN3bLX6u2bbHkZvbvOzbxA-WMRRAXF8CcUw_VbT3-H0eHFNTuAPwcTp2kRA_Q7gqoS29h3MybMti

http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4091262

http://www.xuebuyuan.com/1584364.html

http://blog.163.com/kel_scott66/blog/static/11505396320097245547700/   

--------------------------------------------------------------------------------------------------------

tomcat 开启远程manger的办法

 

首先需要修改tomcat/conf/tomcat-users.xml的用户权限修改为:

<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="admin" password="1234" roles="admin-gui,manager-gui"/>

其次修改tomcat/webapps/host-manager/META-INF/context.xml和tomcat/webapps/manager/META-INF/context.xml,原始代码为:

<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

修改为:

<Context antiResourceLocking="false" privileged="true" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="^.*$" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

修改完成后不用重启tomcat,再进行远程访问,即可。

====================================================

最佳实践调优,用执行器。

====================================================

另外调优tomcat的方法,

tomcat的读写io的方式,有3种

bio,nio,apr,

其中bio是最元始的,效果最差。

apr是最新的,配置太过于繁琐,但是从操作系统级别来解决异步的IO问题,能大幅度提交性能。

这里介绍nio,并且带executor,执行器。

如下:

执行器优化(线程池)

在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。

开启并且使用


 在Connector中指定使用共享线程池

查看Tomcat控制台

Executor重要参数说明:

name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;

namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;

maxThreads:该线程池可以容纳的最大线程数。默认值:200;

maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。

minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。

threadPriority:线程的等级。默认是Thread.NORM_PRIORITY

Connector重要参数说明:

executor:表示使用该参数值对应的线程池;

minProcessors:服务器启动时创建的处理请求的线程数;

maxProcessors:最大可以创建的处理请求的线程数;

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

参数最佳实践

禁用AJP连接器

AJP(Apache JServer Protocol)
AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。
我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。

在管理界面中看不到ajp了:

完成上面几步对Tomcat的优化配置,你的Tomcat服务器并发量肯定会有大幅度的提升。这只是简单的配置,后续还会有针对JVM的专项介绍。JVM参数也是影响Tomcat性能的一个重要因素。

==========================================

tomcat 8 在阿里云centos部署巨慢的问题

是因为随机数生成器

cat /proc/sys/kernel/random/entropy_avail     

用上面此命令查看当前随机数熵池,

没有优化时,随机数值大约20多。安装rngd后,值为3000多,安装java优化参数后,值为300-400多.

 

--------------------------------------------

以下是安装rng服务器的步骤:

yum install rng-tools   安装rngd服务。

systemctl start rngd

如果cpu是不支持rng特性或是使用虚拟机,可以使用/dev/urandom来模拟 

cp /usr/lib/systemd/system/rngd.service   /etc/systemd/system

或者 systemctl enable rngd 若删除 disable

编辑/etc/systemd/system/rngd.service

ExecStart=/sbin/rngd -f -r /dev/urandom

systemctl daemon-reload 重载服务
systemctl restart rngd 重启


 

另外一个方法:

在tomcat/bin/catalina.sh中添加如下语句:

JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom" ,加入到原有的JAVA_OPTS的后面。这种方法安装后,cat /proc/sys/kernel/random/entropy_avail   的值为300多

 

===============================================

部署war在根目录

修改server.xml文件

 <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
     <!-- deployed at root dir  --  // 以下这段是部署在根目录 -->
<Context path="" docBase="/www/webapps/zhouyi2/" />
</Host>

 

posted @ 2020-01-17 17:29  琴声清幽  阅读(923)  评论(0编辑  收藏  举报