??xml version="1.0" encoding="utf-8" standalone="yes"?>
DNS轮询的缺ҎQ当集群中某台服务器停止之后Q用L于dns~存的缘故,便无法访问服务,
必须{到dns解析更新Q或者这台服务器重新启动?br style="font-family: " />
q有是必须把集中的所有服务端口暴露给外界Q没有用apache做前|代理的方式安全Q?br style="font-family: " />
q且占用大量公网IP地址Q而且tomcatq要负责处理静态网资源,影响效率?br style="font-family: " />
优点是集配|最单,dns讄也非常简单?br style="font-family: " />
R-proxy的缺ҎQ当其中一台tomcat停止q行的时候,apache仍然会{发请求过去,D502|关错误?br style="font-family: " />
但是只要服务器再启动׃存在q个问题?br style="font-family: " />
mod_jk方式的优ҎQApache 会自动检到停止掉的tomcatQ然后不再发hq去?br style="font-family: " />
~点是Q当停止掉的tomcat服务器再ơ启动的时候,Apache不刎ͼ仍然不会转发hq去?br style="font-family: " />
R-proxy和mod_jk的共同优Ҏ.可以只将Apache|于公网Q节省公|IP地址资源?br style="font-family: " />
可以通过讄来实现Apache专门负责处理静态网,让Tomcat专门负责处理jsp和servlet{动态请求?br style="font-family: " />
共同~点是:如果前置Apache代理服务器停止运行,所有集服务将无法对外提供?br style="font-family: " />
R-proxy和mod_jk寚w态页面请求的处理Q都可以通设|来选取一个尽可能优化的效果?br style="font-family: " />
q三U方式对实现最佌载均衡都有一定不Imod_jk相对好些Q可以通过讄lbfactor参数来分配请求Q务,但又因ؓmod_jk2方式不被推荐Qmod_jk2已经不再被更C。郁闷中……
哈哈Q发现apache2.2以后与tomcat做负载均衡不需要用mod_jk2,在配|文件中E做修改OK
Java EE应用的性能问题对严肃的目和品来说是一个非帔R要的问题。特别是企业U的应用Qƈ发用户多Q数据传输量大,业务逻辑复杂Q占用系l资源多Q因此性能问题在企业应用变得臛_重要Q它和系l的E_性有着直接的联pR更加重要的是,性能好的应用在完成相同Q务的条g下,能够占用更少的资源,获得更好的用户体验,换句话说Q就是能够节省费用和消耗,获得更高的利润?/span>
要获得更好的性能Q就需要对原来的系l进行性能调优。对q行在Glassfish上的JavaEE应用Q调优是一件相对复杂的事情。在调优以前必须要认识到Q对JavaEE的系l,调优是多层次的。一个JavaEE的应用其实是整个pȝ中很的一部分。开发h员所开发的JavaEEE序Q无论是JSPq是 EJBQ都是运行在JavaEE应用服务器(GlassfishQ之上。而应用服务器本n也是Java语言~写的,需要运行在Java虚拟Z上?Java虚拟Z只不q是操作pȝ的一个应用而已Q和其他的应用(如ApacheQ对于操作系l来说没有本质的区别。而操作系l却q行在一定的g环境中,包括CPUQ内存,|卡和硬盘等{。在q么多的层次中,每一个层ơ的因素都会影响整个pȝ的性能。因此,对一个系l的调优Q事实上需要同时对每个层次都要调优。JavaEE应用性能调优不仅仅和Glassfish有关QJava语言有关Q还要和操作pȝ以及g都有关系Q需要调优者有l合的知识和技能。这些不同层面的Ҏ需要综合纵效,l合在一LzM用,才能快速有效的定位性能瓉。下面是一些具体的案例分析:
某个JavaEE应用q行?颗CPU的服务器上。上U运行发现性能不稳定。性能随着旉的增加而越来越慢。通过操作pȝ的工PmpstatQ,发现在系l很慢的时候,只有一颗CPU很忙Q其他的CPU都很I闲。因此怀疑是Java虚拟机经常进行内存回Ӟ因ؓ虚拟机在内存回收的时候,有的回收法通常只能q行在一个CPU上。通过Java虚拟机的工具“jstat”可以清楚的看刎ͼJava虚拟行内存回收的频率非常高,几乎?U中有一ơ,每次回收的时间ؓ2U钟。另外,通过“jstat”的输发现每次回收释放的内存非常有限,大多数对象都无法回收。这U现象很大程度上暗示着内存泄漏。?Java虚拟机的工具“jmap”来获得当前的一个内存映象。发现有很多Q超q?0000Q个的session对象。这是不正常的一个现象。一般来_ session对应于一个用L多次讉KQ当用户退出的时候,session应该失效,对象应该被回收。当我们和这个系l的开发工E师了解有关 session的设|,发现当他们部|应用的时候,竟然session的timeout旉讄?0分钟Qƈ且没有提供logout的接口。这L讄下,每个session的数据都会保?0分钟才会被回收。根据我们的Q系l提供了logout的链接,q且告诉用户如果退出应用,应该点击q个 logout的链接;q且session的timeout旉修改?分钟。通过几天的测试,证明泄漏的问题得到解冟?/p>
某胦务应用运行在JavaEE服务器上Q后台连接Oracle数据库。ƈ发用h量超q?00人左右的时候系l停止响应。通过操作pȝ层面的进E监控工具发现进Eƈ没有被杀L挂vQ而CPU使用率几乎ؓ零。那么是什么原因导致系l停止响应用戯求呢Q我们利用Java虚拟机的工具Qkill -3 pidQ将当前的所有线E状态DUMP出来Q发现JavaEE服务器的大部分处理线E都在等待数据库q接池的q接Q而那些已l获得数据库q接的线E却处于d状态。数据库理员应要求查了数据库的状态,发现所有的q接的session都处于死锁状态。显Ӟq是因ؓ数据库端出现了死锁的操作Q阻塞了那些有数据库操作的请求,占用了所有数据库q接池中的连接。后l的h如果q要从连接池中获取连接,׃d在连接池上。当解决数据库死锁的问题之后Q性能问题q刃而解?/p>
电信应用q行?4位Java虚拟ZQ系l运行得很不E_Q系l经常停止响应。用进E工h看,发现q程q没有被杀L挂v。利用Java虚拟机的工具发现pȝ在长旉的进行内存回Ӟ内存回收的时间长?5分钟Q整个系l在内存回收的时候就像挂起一栗另外还观察到系l用了12G的内存(因ؓ?64位虚拟机所以突破了4G内存的限Ӟ。从开发h员那里了解到Q这个应用ؓ了提高性能Q大量用了对象~存Q但是事与愿q,在Java中用过多的内存Q虽然在正常q行的时候能够获得很好的性能Q但是会大大增加内存回收的时间。特别是对象~存Q本pȝ使用?G的缓存空_q存了6000多万个对象,对这些对象的遍历D了长旉的内存回收。根据我们的Q将~存I间减少?GQƈ调整回收法Q用增量回收的法Q,使得pȝ׃内存回收而造成的最大停时间减到4U,基本满用户的需求?/p>
数字校园应用q行?CPU的Solaris10服务器上Q中间g为JavaEE服务器。系l在做大q发压力试的时候,h响应旉比较慢,通过操作pȝ的工PmpstatQ发现CPU使用率比较高。ƈ且系l占用绝大多数的CPU资源而不是应用本w。这是个不正常的现象Q通常情况下用户应用的CPU占用率应该占主要CQ才能说明系l是正常工作。通过Solaris 10的Dtrace脚本Q我们查看当前情况下哪些pȝ调用p了最多的CPU资源Q竟然发现最pCPU的系l调用是“fork”。众所周知Q?“fork”pȝ调用是用来生新的进E,在Java虚拟Z只有U程的概念,l不会有q程的生。这是个非常异常的现象。通过本系l的开发h员,我们扑ֈ了答案:每个用户h的处理都包含执行一个外部shell脚本Q来获得pȝ的一些信息。这是通过Java?#8220;Runtime.getRuntime ().exec”来完成的Q但是这U方法在Java中非常消耗资源。Java虚拟机执行这个命令的方式是:首先克隆一个和当前虚拟ZLq程Q再用这个新的进E去执行外部命oQ最后再退个进E。如果频J执行这个操作,pȝ的消耗会很大Q不仅在CPUQ内存操作也很重。用h据徏议去掉这个shell 脚本执行的语句,pȝ立刻回复了正常?/p>
内容理QCMSQ系l运行在JavaEE服务器上Q当pȝ长时间运行以后,性能非常差,用户h的g时比pȝ刚上U的时候要大很多,q且用户的ƈ发量很小Q甚x单个用户也很慢。通过操作pȝ的工兯察,一切都很正常,CPU利用率不高,IO也不是很大,内存很富余,|络几乎没有压力Q因为ƈ发用户少Q。先不考虑U程互锁的问题,因ؓ单个用户性能也不好。通过Java虚拟察也没有发现什么问题(内存回收很少发生Q。这使得我们不得不用代码跟t器来全E跟t代码。我们采用了Netbeans的ProfilerQ跟t的l果非常意外Q用戯求的90Q的旉在创建新文g。从pȝ设计人员了解刎ͼ此系l用了一个目录用于保存所有上传和׃n的文Ӟ文g用其命名方式来唯一区别于其他文件。我们查看了那个文g目录Q发现该目录下已l拥?0万个文g了。这时候我们才定位到问题了Q在同个目录下放|太多的文gQ在创徏新文件的时候,pȝ的开销是比较大的,例如Z防止重名Q文件系l会遍历当前目录下所有的文g名等{。根据我们的Q将文g分类保存在不同的目录下,性能有了大幅度的提高?/p>
q行在JavaEE服务器上的ERPpȝQ在CPU充分利用的情况下性能仍然不太好。从操作pȝ层面上观察不C么大问题Q而且ERPpȝq于复杂Q代码跟t比较困难。于是进行了CPU状态的q一步检查,发现CPU的TLB命中率不是很高,于是对Java虚拟机的启动参数q行了修改,虚拟Z用大寸的内存页面,提高TLB的命中率。下面的参数是在Sun的HOTSPOT中调整大寸Q?MQ页面的讄Q?br />
-XX:+AggressiveHeap
-XX:LargePageSizeInBytes=256m
通过调整QTLB命中明显提高Q性能也得到近40Q的提升?/p>
转蝲之:http://developers.sun.com.cn/blog/yutoujava/entry/8
负蝲均衡器通常UCؓ四层交换机或七层交换机。四层交换机主要分析IP层及TCP/UDP层,实现四层量负蝲均衡。七层交换机除了支持四层负蝲均衡以外Q还有分析应用层的信息,如HTTP协议URI或Cookie信息?/p>
一、F5配置步骤Q?br />
1、F5l网规划
(1)l网拓朴图(具体到网l设备物理端口的分配和连接,服务器网卡的分配与连接)
(2)IP地址的分配(具体到网l设备和服务器网卡的IP地址的分配)
(3)F5上业务的VIP、成员池、节炏V负载均衡算法、策略保持方法的定
2、F5配置前的准备工作
(1)版本?br />
f5-portal-1:~# b version
Kernel:
BIG-IP Kernel 4.5PTF-07 Build18
(2)旉查-Q如不正,请到单用h式下q行修改
f5-portal-1:~# date
Thu May 20 15:05:10 CST 2004
(3)甌licenseQ-现场用的F5都需要自己到F5|站上申请license
3、F5 的通用配置
(1)在安全要求允许的情况下,在setup菜单中可以打开telnet及ftp功能Q便于以后方便维?br />
(2)配置vlan unique_mac选项Q此选项是保证F5上不同的vlan 的MAC地址不一栗在~省情况下,F5的各个vlan的MAC地址是一LQ徏议在配置Ӟ把此统一选择上。可用命令ifconfig –a来较?
具体是system/Advanced Properties/vlan unique_mac
(3)配置snat any_ip选项选项Q此选项Z保证内网的机器做了snat后,可以对ping的数据流作{换。Ping是第三层的数据包Q缺省情况下F5是不对ping的数据包作{换,也就是internal vlan的主机无法ping external vlan的机器。(注意Q还可以采用telnet来验证。)
具体是system/Advanced Properties/snat any_ip
4、F5 的初始化配置
在对F5q行初始旉用命令行方式来进行初始化Q用Web面初始化的方式有时会有问题Q。登录到命o行上Q运行config或setup命o可以q行初始化配|。初ơ运行时会提CZ些license的信息?br />
default:~# config
5、F5双机切换监控配置Q有F5双机旉要)
(1)在web面中选择相应的vlanQ在arm failsafe选择则可。TimeoutZF5收不到包的时间vQ经q多长时间就发生切换。此配置不能同步Q需要在F5的主备机上同旉|。每个vlan都可以配|vlan arm failsafe?br />
具体在Network?br />
(2)在web面中选择systemQ在redundant properties中把gateway failsafe选择则可。Router是需要监控的地址。此配置不能同步Q需要在F5的主备机上同旉|。一套F5上只能配|一个gateway failsafe
具体在system/redundant properties/gateway failsafe
6、F5 MAC masquerade配置
Mac Masquerading是F5的Shared IP Address (Floating)的MAC地址QF5如果不配|此,则shared IP Address的MAC地址与每台F5的vlan self IP Address的MAC地址是一L?br />
一般服务器是以shared IP Address为网养I在两台F5上都配置了Mac MasqueradeQ相同的MAC地址Q,q样当F5发生切换后,服务器上shared IP address的MAC不变Q保证了业务的不中断
具体在Network?/p>
7、F5的pool配置
(1)在配|工具Web面的导航面板中选择“Pools”中的“Pools”标签Q点?#8220;ADD”按钮d服务器池(Pool)?br />
(2)在池属性(Pool PropertiesQ中?#8220;Load Balancing Method”表格中选择负蝲均衡{略Q通常采用默认{略Q?#8220;Round Robin”
(3)?#8220;Resouces”表格中的“Member Address”文本框输入成员IP地址Q在“Service”文本框中输入服务端口Q点?#8220;>>”d?#8220;Current Members”当前成员列表中?br />
(4)d所有组成员Q点?#8220;Done”完成配置?
(5)?#8220;Pools”中的“Pool Name”列选中特定池,然后池属性页面中选择“Persistence”标签?
(6)?#8220;Persistence Type”表格中选定会话保持cd。点?#8220;Apply”应用配置?
8、F5的virtual server配置
(1)在配|工具Web面的导航面板中选择“Virtual Servers”中的“Virtual Servers”标签Q点?#8220;ADD”按钮d虚拟服务器?
(2)?#8220;Add Virtual Server”H口?#8220;Address”文本框中输入虚拟服务器IP地址Qƈ?#8220;Service”文本框中输入服务端口h在下拉框中选择现有的服务名Uͼ点击“Next”执行下一步?
(3)?#8220;Add Virtual Server”H口?#8220;Configure Basic Properties”面中点?#8220;Next”执行下一步??#8220;Add Virtual Server”H口?#8220;Select Physical Resources”面中点d选按?#8220;Pool”Qƈ在下拉框中选择虚拟服务器对应的负蝲均衡池?
(4)?#8220;Done”完成创徏虚拟服务器?
9、F5的monitor的配|?br />
(1)在配|工具Web面的导航面板中选择“Monitor”中的“Monitors”标签Q点?#8220;ADD”按钮d监控
(2)Ҏ需要选择相关兌cdQ?#8220;Node Associations”标签、Node Address Associations”标签、Service Associations”标签?br />
(3)被选关联标{中Q在“Choose Monitor”表格中选择监控名称Q点?#8220;>>”按钮d?#8220;Monitor Rule”监控规格文本框中。监控规则可以ؓ一条或多条?br />
(4)选择监控规则后,在对应节点的“Associate Current Monitor Rule”复选框中选中。如果欲删除监控兌Q则选中对应节点?#8220;Delete Existing Assocation”复选框?br />
(5)点击“Apply”兌监控
10、F5的SNAT配置
(1)在配|工具Web面的导航面板中选择“NATs”中的“SNATs”标签Q点?#8220;ADD”按钮dSNAT地址?
(2)?#8220;Add SNAT”H口?#8220;Translation Address”?#8220;IP”文本框中输入SNAT IP地址Qƈ?#8220;Origin List”?#8220;Origin Address”文本框中输入节点IP地址或在“Origin VLAN”下拉框中选择VLAN名称Q点?#8220;>>”加入“Current List”列表?
(3)?#8220;Done”完成dSNAT IP地址?
11、F5d机同步及切换校验
具体在system/Redundant Properties/synchonize Config...
12、业务的校验
F5d机切换的校验
F5dZ务运行的校验
其中1~6是基本配|,7~10业务配置Q?1~12校验
二、F5负蝲均衡器的l护
1、F5节点及应用的?br />
通过“System -> Network Map”面查看节点及应用状?br />
l色:节点或虚拟服务器?#8220;UP”
U色:节点或虚拟服务器状态ؓ“Down”
灰色:节点或虚拟服务器被禁?/p>
2、日志的?br />
(1)当天日志Q从web上查看logs中的system log、bigip log、monitor logQ看日志中是否有异常?
(2)7天内的日?br />
pȝ日志文g - /var/log/messages消息, pȝ消息
BIG-IP 日志文g - /var/log/bigip
“External” BIG-IP events
Monitor 日志文g - /var/log/bigd
“Internal” BIG-IP Events
3DNS 日志文g - /var/log/3dns
3DNS Information
用gzcat、more、vi命o打开
3、F5量的检?br />
(1)业务上的基本l护主要是在F5上查看F5分发到各节点的connect是否负蝲均衡Q一般不应有数量U的差别
(2)通过WEB->pool-> pool statistics中查看connection中的total和current,不应有明昄数量U的差别
(3)F5 qkview命o
执行qkviewQ执行完成后输Z息保存在文g“/var/tmp/-tech.out”中,供高U技术支持用
(4)F5 tcpdump命o
TCPDUMP是Unixpȝ常用的报文分析工PTCPDUMPl常用于故障定位Q如会话保持失效、SNAT通信问题{?br />
tcpdump [ -adeflnNOpqRStvxX ] [ -c count ] [ -F file ]
[ -i interface ] [ -m module ] [ -r file ]
[ -s snaplen ] [ -T type ] [ -w file ]
[ -E algo:secret ] [ expression ]
1. Tomcat是Apache鼎力支持的Java Web应用服务器,׃它优U的稳定性以及丰富的文档资料Q广泛的使用人群Q从而在开源领域受到最q泛的青睐?shy;
2. Jboss作ؓJava EE应用服务器,它不但是Servlet容器Q而且是EJB容器Q从而受C业开发h员的Ƣ迎Q从而I补了Tomcat只是一个Servlet容器的缺憾?shy;
3. Resin也仅仅是一个Servlet容器Q然而由于它优秀的运行速度Q得它在轻量Java Web领域备受喜爱Q特别是在互联网Web服务领域Q众多知名公叔R采用其作Z们的Java Web应用服务器,譬如163、ku6{?shy;
在商用应用服务器里主要有QWeblogic、WebsphereQ其中Weblogic我也使用q很长一D|_当时也只用其当Servlet容器Q然而就在同{条件下Q在性能及易用性等斚wQ要比Tomcat优秀很多?shy;
4.glassfish是Sun公司推出的Java EE服务器,一个比较活跃的开源社?不断的通过C的反馈来提高其的可用?l过glassfish v1 glassfish v2 C天的glassfish v3 ,它已l走向成?Glassfish是一个免贏V开放源代码的应用服务,它实CJava EE 5QJava EE 5 q_包括了以下最新技术:EJB 3.0、JSF 1.2、Servlet 2.5、JSP 2.1、JAX-WS 2.0、JAXB 2.0?Java Persistence 1.0、Common Annonations 1.0、StAX 1.0{?
支持集群,通过内存中会话状态复?增强了部|体pȝ构的可用性与可~?它对集群有着很好的支?可以单到通过d机器,可L的提高网站的带负载能?在解析能力方?它对html的吞吐能力与apache服务器不分上?是tomcat所不能比的,支持目录部v,热部|?解决了tomcat对热部v能力的缺?在版本方面做的更加h性化,有开发时用的化版,专门用于部vweb目的版?q要完全W合j2ee标准的版?