`

针对JBOSS访问缓慢做的一些优化

阅读更多
转自:http://kerry.blog.51cto.com/172631/161179

JBOSS访问缓慢,查看jboss的并发请求数及其TCP连接状态:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 5
SYN_RECV 263
CLOSE_WAIT 30
ESTABLISHED 308
FIN_WAIT1 499
FIN_WAIT2 71
CLOSING 20
TIME_WAIT 19070
检查发现TIME_WAIT 状态链接很高, 这样就需要对内核做些优化,
Vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.core.netdev_max_backlog =8096
net.ipv4.ip_local_port_range = 1024    65000
net.ipv4.tcp_max_tw_buckets = 5000

修改完记的使用sysctl -p 让它生效

以上参数的注解
/proc/sys/net/ipv4/tcp_tw_reuse
该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。

/proc/sys/net/ipv4/tcp_tw_recycle
recyse是加速TIME-WAIT sockets回收

对tcp_tw_reuse和tcp_tw_recycle的修改,可能会出现.warning, got duplicate tcp line warning, got BOGUS tcp line.上面这二个参数指的是存在这两个完全一样的TCP连接,这会发生在一个连接被迅速的断开并且重新连接的情况,而且使用的端口和地址相同。但基本上这样的事情不会发生,无论如何,使能上述设置会增加重现机会。这个提示不会有人和危害,而且也不会降低系统性能,目前正在进行工作

/proc/sys/net/ipv4/tcp_keepalive_time
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时

/proc/sys/net/ipv4/tcp_fin_timeout    最佳值和BSD一样为30
fin_wait1状态是在发起端主动要求关闭tcp连接,并且主动发送fin以后,等待接收端回复ack时候的状态。对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。

/proc/sys/net/core/netdev_max_backlog
该文件指定了,在接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。
net.ipv4.ip_local_port_range = 1024    65000
表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

net.ipv4.tcp_max_tw_buckets = 5000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。


其它查看连接数据命令:
1)统计80端口连接数
netstat -nat|grep -i "80"|wc -l
1
2)统计httpd协议连接数
ps -ef|grep httpd|wc -l
1
3)、统计已连接上的,状态为“established'
netstat -na|grep ESTABLISHED|wc -l
2
4)、查出哪个IP地址连接最多,将其封了.
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r +0n

netstat -na|grep SYN|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r +0n
iptables的设置:

防止同步包洪水(Sync Flood)
# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
也有人写作
#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
--limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改
防止各种端口扫描
# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j
ACCEPT
Ping洪水攻击(Ping of Death)
# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT


修改JBOSS连接池:
Vi /usr/local/jboss/server/default/deploy/jbossweb-tomcat55.sar/server.xml
<Connector port="80" address="${jboss.bind.address}"
         maxThreads="500" strategy="ms" maxHttpHeaderSize="8192"
         emptySessionPath="true" maxKeepAliveRequests="1"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="10000" disableUploadTimeout="true"/>


修改JBOSS内存:
Vi /usr/local/jboss/bin/run.conf
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms1024m -Xmx2048m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
fi








另贴一类似的文章:
#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

LAST_ACK 14
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18122

状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

也就是说,这条命令可以把当前系统的网络连接状态分类汇总。

下面解释一下为啥要这样写:

一个简单的管道符连接了netstat和awk命令。

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

先来看看netstat:

netstat -n

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT

你实际执行这条命令的时候,可能会得到成千上万条类似上面的记录,不过我们就拿其中的一条就足够了。

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

再来看看awk:

/^tcp/
滤出tcp开头的记录,屏蔽udp, socket等无关记录。

state[]
相当于定义了一个名叫state的数组

NF
表示记录的字段数,如上所示的记录,NF等于6

$NF
表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT

state[$NF]
表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数

++state[$NF]
表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一

END
表示在最后阶段要执行的命令

for(key in state)
遍历数组

print key,"\t",state[key]
打印数组的键和值,中间用\t制表符分割,美化一下。

如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vim /etc/sysctl.conf
编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

下面附上TIME_WAIT状态的意义:

客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口
状态为TIME_WAIT

是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢?
有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?

主动关闭的一方在发送最后一个 ack 后
就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间
这个是TCP/IP必不可少的,也就是“解决”不了的。

也就是TCP/IP设计者本来是这么设计的
主要有两个原因
1。防止上一次连接中的包,迷路后重新出现,影响新连接
(经过2MSL,上一次连接中所有的重复包都会消失)
2。可靠的关闭TCP连接
在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发
fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以
主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。

TIME_WAIT 并不会占用很大资源的,除非受到攻击。

还有,如果一方 send 或 recv 超时,就会直接进入 CLOSED 状态

分享到:
评论

相关推荐

    Jboss 优化配置.

    ### JBoss优化配置详解 #### 一、JBoss后台启动 ...以上就是关于JBoss优化配置的一些关键知识点,希望能帮助到正在使用或打算使用JBoss的朋友。当然,具体的优化策略还需要根据实际应用场景进行调整。

    jboss的性能优化

    通过深入研究和实践,找到了一些有效的解决方案来缓解甚至解决JBoss内存紧张的问题。 ##### 1. 修改`report.war`部署文件 在`.jboss\server\default\deploy\report.war`目录下,对部署文件进行了调整,虽然文中...

    Jboss + 优化配置

    ### JBoss + 优化配置详解 #### 一、JBoss后台启动优化 JBoss作为一款广泛使用的Java应用服务器,其启动方式的选择对于系统的稳定性和性能至关重要。后台启动可以使JBoss在启动后不会阻塞终端,方便进行其他操作或...

    JBOSS优化配置

    JBOSS优化配置是针对企业级Java应用服务器JBoss进行性能提升的重要环节,涉及多个方面,包括后台启动、内存管理、日志输出模式以及数据库连接池的调整。下面将详细介绍这些知识点。 一、JBOSS后台启动: 在JBOSS的...

    jboss内存溢出优化

    在IT领域,特别是Java应用服务器的管理与优化中,JBoss作为一款广泛使用的开源应用程序服务器,其性能调优一直是系统管理员和技术专家关注的焦点。当遇到“JBoss内存溢出”问题时,优化策略的选择变得至关重要,这...

    Jboss性能优化整合

    《JBoss性能优化整合》是一份深度探讨Jboss应用服务器性能提升的重要资料,它集结了作者反复试验与研究的心得,旨在为读者提供实用而全面的优化策略。Jboss作为一款开源的企业级Java应用服务器,其性能表现直接影响...

    不同版本jboss访问EJB的方式

    自己经过实践总结出来的jboss和jboss7访问EJB的方法,经过试验证明方法无误,这么好的资源还不赶快下载!

    weblogic、jboss集群配置,参数优化

    以下是一些常见的优化策略: - **内存调优**:根据应用需求调整堆大小(如-Xms和-Xmx)和新生代、老年代的比例,避免垃圾收集引起的性能波动。 - **线程池优化**:设置合适的线程池大小,防止过多线程导致的资源...

    jboss安全优化方案

    争对安全性方面的配置,如需要禁止不需要的http请求方式等

    JBOSS,JBoss安装部署

    访问Red Hat的官方网站或者JBoss社区网站,选择合适的JBoss版本进行下载。常见的版本有JBoss EAP(Enterprise Application Platform)和WildFly,两者都是企业级的Java应用服务器,但EAP是商业版,WildFly是其社区...

    Jboss

    深入研究JBoss的源码有助于开发者更好地理解其内部机制,优化性能,解决特定问题。JBoss使用Maven作为构建工具,源代码结构清晰,便于阅读和调试。通过源码分析,你可以: - 学习Java EE规范的实现细节。 - 了解...

    Jboss配置虚拟路径

    虚拟路径的配置是JBoss中一项非常实用的功能,它允许开发者将实际的文件系统路径映射到一个更易于管理和访问的URL路径上,极大地提升了应用程序的灵活性和可维护性。 #### 一、理解虚拟路径 虚拟路径,顾名思义,...

    JBoss优化xml文件

    此文件用于优化JBoss部署时,创建一个文件夹,而不是打成一个war包,这样大大提高了起服务的时间,在IDE中修改jsp文件时,也不需要重启jboss,jboss会自动加载jsp文件

    JBoss安全优化

    JBoss 安全优化主要关注的是提升服务器的安全性,防止未授权访问和敏感信息泄露。在JBoss中,可以通过多种方式来强化系统安全,包括数据源配置加密、使用HTTPS协议、设置定时登出机制以及调整错误页面重定向等措施。...

    在jboss上部署web应用

    【JBoss 概述】 JBoss 是一个开源的、基于Java的、全面实现了J2EE规范的应用服务器。它提供了企业级的功能,如EJB(Enterprise JavaBeans)、JMS(Java Message Service)、JTS/JTA(Java Transaction Service / ...

    优化后jboss

    【JBoss 优化详解】 JBoss,作为一款开源的应用服务器,是Java企业级开发中的重要组件,它基于Java EE标准,提供了丰富的服务和支持。在实际应用中,为了提高性能、稳定性和资源利用率,对JBoss进行优化是必不可少...

    Jboss项目部署文档

    Jboss 项目部署文档 Jboss 项目部署文档是指在 Jboss 服务器上部署项目的详细步骤,包括环境变量的配置、项目打包、配置文件的修改、JNDI 的配置等。以下是 Jboss 项目部署文档的详细知识点: 一、环境变量配置 ...

    Jboss控制台jmx-console的安全设置

    Jboss控制台jmx-console的安全设置

    jboss-eap-7.2.6-patch

    【JBoss EAP 7.2.6 补丁包详解】 JBoss Enterprise ...总结,JBoss EAP 7.2.6-patch 包含了一系列针对 JBoss EAP 7.2.x 系列的补丁,用户应遵循正确的流程和策略来应用这些补丁,以保持系统安全、稳定和高效。

    JBOSS4设置控制台jmx-console登录密码

    在IT领域,特别是对于使用JBOSS的企业级应用服务器的管理员和开发者而言,掌握如何设置JBOSS控制台(具体为jmx-console)的登录密码是一项至关重要的技能。这不仅关乎系统的安全性,还直接影响到对服务器监控和管理...

Global site tag (gtag.js) - Google Analytics