且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

兰蔻御用运维总结之一

更新时间:2022-09-08 22:30:12

接下来的篇章我首先是谈需求与技术谈兰蔻的客户要求以及与之对应的运维结构然后谈归纳总结反思感悟以及我的导师对我及我两个大学同学的评价。
首先讲述客户需求
在谈客户需求之前我想谈一下感触就是工期比较紧张的情况下一旦需求确定就不要轻易修改因为这样才能保证项目的按时完成不然就会出现软件开发工程师不停的修改程序运维工程师不断地调整服务器部署项目经理疲于应付承受来自客户和项目组成员两方面的压力。那这个项目就离见马克思不远了。
需求邮件内容如下
1月11日开始推广兰蔻年度回馈活动的计划请根据以下数据推算出大概的“爱兰蔻”"礼品随你挑“活动的流量并对目前两台服务器做相关的压力测试。 
压力测试建议使用的工具Microsoft Web Application Stress Tool 
请于12月31日前做好相关的压力测试看看是否目前两台服务器在以下的资源推广的情况下能否承受相应的流量。是否需要增加服务器。
  • 短信发送2次
     1月11日-1月13日 发送量165万 
     1月25日 发送量 53万
  • EDM发送1次
大概会在1月20或21日 发送量 20万 
这是邮件关于需求部分的原内容我直接Copy下来。对这封邮件进行一次解释
邮件中提到的家有兰蔻这是一期的活动活动的内容有上传一张化妆桌上的兰蔻的图片图片大小从几十k到10M以下在网站的页面上展现的是缩略图点击缩略图会看到经过压制的符合一定比例的图片而不是原图。用户上传图片后可以在附属栏中填写好朋友的邮件地址请好朋友到此网站点击他的图片从而进行拉票活动。在此活动进行到第10天包括第十天兰蔻会根据图片的排名在前20名的用户得到兰蔻的礼品。原拓扑图如下兰蔻御用运维总结之一
简单介绍一下软硬件配置两台DellR610Intel5504*2/4G/146*3/1000M网卡*4FW是cisco5504并发连接数25000 用户数无限制网络端口8个快速以太网端口、1个SSC扩展插槽网络吞吐量(Mbps)150介绍系统软件操作系统Windows 标准版R2web服务器Tomcat6.0.20DBServerMSSQL2008.
介绍一下JVM优化
JVM优化 
JVM的server版和client版的区别 
JVM动态库有client和server两个版本分别针对桌面应用和服务器应用做了相应的优化client版本加载速度比较快server版本加载速度比较慢但是运行速度比较快。 
操作手法 
把%JAVA_HOME%\jar\bin中的server的文件夹拷贝到%JAVA_HOME%同一级目录的jre中的bin目录下然后修改C:\Program Files\Java\jre6\lib\i386目录中的jvm.cfg把-server KNOWN 放在-client KNOWN前面然后保存。现在可以在dos窗口中写入命令java -version来查看是否是server版本 
C:\Documents and Settings\actop>java -version 
java version "1.6.0_17" 
Java(TM) SE Runtime Environment (build 1.6.0_17-b04) 
Java HotSpot(TM) Server VM (build 14.3-b01, mixed mode)
介绍一下web服务器的参数配置
Server.xml:
<Connector port="80" address="192.168.0.2" protocol="org.apache.coyote.http11.Http11NioProtocol"  
                 maxHttpHeaderSize="8192"  URIEncoding="UTF-8" useBodyEncodingForURI="true" 
                 maxThreads="2000" minSpareThreads="75" maxSpareThreads="300"  
                 enableLookups="false" redirectPort="8443" acceptCount="2000" 
                 compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"   
                 connectionTimeout="50000" disableUploadTimeout="true"/> 
catalina.bat:
set JAVA_OPTS=-server -XX:+UseConcMarkSweepGC -Djava.rmi.server.hostname=XX.XX.XX.XX(your IP address) -Djava.awt.headless=true -Xms1400m -Xmx1400m -XX:NewSize=48m -XX:MaxNewSize=128m -XX:PermSize=128m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true 
set CATALINA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 
set CATALINA_OPTS=%CATALINA_OPTS% -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true
对以上参数做如下解释
首先我们对tomcat6.0.20的新特性进行介绍
首先讲协议部分参见网上博文
===========================================================================================================
[转]Tomcat 6 支持 NIO -- Tomcat的四种基于HTTP协议的Connector性能比较 
Tomcat 6 支持 NIO -- Tomcat的四种基于HTTP协议的Connector性能比较
Tomcat从5.5版本开始支持以下四种Connector的配置分别为
<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443"/> 
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"   redirectPort="8443"/> 
<Connector executor="tomcatThreadPool"  port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 
<Connector executor="tomcatThreadPool" port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" /> 
我们姑且把上面四种Connector按照顺序命名为 NIO, HTTP, POOL, NIOP 
为了不让其他因素影响测试结果我们只对一个很简单的jsp页面进行测试这个页面仅仅是输出一个Hello World。假设地址是 http://tomcat1/test.jsp 
我们依次对四种Connector进行测试测试的客户端在另外一台机器上用ab命令来完成测试命令为 ab -c 900 -n 2000 http://tomcat1/test.jsp最终的测试结果如下表所示(单位:平均每秒处理的请求数) 
NIO    HTTP    POOL    NIOP 
281     65     208     365 
666     66     110     398 
692     65     66     263 
256     63     94     459 
440     67     145     363 
由这五组数据不难看出HTTP的性能是很稳定但是也是最差的而这种方式就是Tomcat的默认配置。NIO方式波动很大但没有低于280 的NIOP是在NIO的基础上加入线程池可能是程序处理更复杂了因此性能不见得比NIO强而POOL方式则波动很大测试期间和HTTP方式一样不时有停滞。 
由于linux的内核默认限制了最大打开文件数目是1024因此此次并发数控制在900。 
尽管这一个结果在实际的网站中因为各方面因素导致可能差别没这么大例如受限于数据库的性能等等的问题。但对我们在部署网站应用时还是具有参考价值的。
===========================================================================================================
Connector:客户端和service之间的连接器。 protocol指定了该端口侦听的协议类型maxHttpHeaderSizeHttp的Header的最大限制 
URIEncodingurl传参时的编码格式 
useBodyEncodingForURI根据相应该请求页面request.CharacterEncoding参数对数据进行重新编码 
maxThreadsTomcat可创建的最大的线程数 
minSpareThreads初始化创建的线程数 
maxSpareThreads一旦创建的线程超过这个数Tomcat就将关闭不再需要的Socket线程 
enableLookups使用允许DNS查询通常情况下设置为false设置为false就直接返回ip地址 
acceptCount当所有可以使用的处理请求的线程树都被使用时可以放到请求队列中的请求数超过这个数的请求将不予处理。其实该属性与ServerSocket(int port,int backlog)中的backlog参数意义相同具体可参考ServerSocket的JDK API 
connectionTimeout网络连接超时单位毫秒。设置为0表示永不超时 
compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 在客户端请求网页后从服务器端将网页文件压缩再下载到客户端由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML ,CSS,Javascript , Text 它可以节省40%左右的流量。更为重要的是它可以对动态生成的包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩压缩效率惊人 
1) compression="on" 打开压缩功能 
2) compressionMinSize="2048" 启用压缩的输出内容大小这里面默认为2KB 
3) noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器不启用压缩 
4) compressableMimeType="text/html,text/xml" 压缩类型
disableUploadTimeout设置是否上传超时。
开始讲解catalina.bat中的参数设置
-XmsJVM初始化堆大小 
-XmxJVM堆最大值 
MaxPermSize为永久对象如jdbc驱动各种随jvm启动时加载的jar包占用内存数。 
Xms 与 Xmx常规情况下应该设置成同样大小否则会影响jvm性能。一般最大不超过2G。


本文转自guoli0813 51CTO博客原文链接http://blog.51cto.com/guoli0813/273230如需转载请自行联系原作者