2010年的1月11号之后的日子对我而言,是一个艰苦奋斗的历程。我把这次的运维经历称之为:兰蔻御用一战。刚开始我就知道兰蔻一役,需要总结,反思的会很多。可是怎么也不会想到这次总结竟然是一场暴风骤雨。
接下来的篇章,我首先是谈需求与技术,谈兰蔻的客户要求以及与之对应的运维结构,然后谈归纳总结,反思,感悟以及我的导师对我及我两个大学同学的评价。
首先讲述客户需求:
在谈客户需求之前,我想谈一下感触:就是工期比较紧张的情况下,一旦需求确定,就不要轻易修改,因为这样才能保证项目的按时完成,不然就会出现软件开发工程师不停的修改程序,运维工程师不断地调整服务器部署,项目经理疲于应付,承受来自客户和项目组成员两方面的压力。那这个项目就离见马克思不远了。
需求邮件内容如下:
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名的用户得到兰蔻的礼品。原拓扑图如下:
简单介绍一下软硬件配置:两台DellR610(Intel5504*2/4G/146*3/1000M网卡*4),FW是cisco5504(并发连接数:25000 用户数无限制,网络端口:8个快速以太网端口、1个SSC扩展插槽,网络吞吐量(Mbps):150),介绍系统软件:操作系统Windows 标准版R2,web服务器Tomcat6.0.20,DBServer:MSSQL2008.
介绍一下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指定了该端口侦听的协议类型,maxHttpHeaderSize:Http的Header的最大限制
URIEncoding:url传参时的编码格式
useBodyEncodingForURI:根据相应该请求页面request.CharacterEncoding参数对数据进行重新编码
maxThreads:Tomcat可创建的最大的线程数
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中的参数设置:
-Xms:JVM初始化堆大小
-Xmx:JVM堆最大值
MaxPermSize为永久对象(如jdbc驱动,各种随jvm启动时加载的jar包)占用内存数。
Xms 与 Xmx常规情况下应该设置成同样大小,否则会影响jvm性能。一般最大不超过2G。

转载于:https://blog.51cto.com/guoli0813/273230

兰蔻御用运维总结之一相关推荐

  1. 李逵遇上李鬼 2009中国IT运维第一案始末

    回望2009,中国软件市场可谓狼烟四起.除了SAP.Oracle等老牌国际软件厂商深陷诸多丑闻外,国内IT运维行业更是爆出两厂商因抄袭事件而对簿公堂的消息. 随着天津摩卡软件与上海北塔软件纠纷的起起伏 ...

  2. Linux 运维常用命令 find、awk、sed、grep、vi、ps、lsof、rpm

    先用一个脚本,模拟创建 14 个测试文件: #!/bin/bash for ((i=1;i<=10;i++)); do if [ $i -lt 3 ] thentouch /home/mysql ...

  3. 【运维学习笔记】运维入门

    前言: 这几天过的很像第一年来提高班装系统那会儿,接触了很多新的东西,大量的东西塞在脑子里!今天系统的整理了一下! 时间 事件 1周 看一些硬件的结构,拆 了一些东西(发现其实硬件也没有很神奇,是一些 ...

  4. python实时读取日志并打印关键字怎么实现_面试宝典_Python.运维开发.0004.用Python实现tail实时输出新增日志?...

    面试题目: 1. 用PYTHON实现tail -f功能,默认显示最后15行,实时输出新增行? 解题思路: 1. 此需求在很多场景中都有遇到,而且在各大群中也被讨论过,虽然有现成的模版如pyinotif ...

  5. mysql运维工资_MySQL运维踩坑

    image ZERO 背景 本文主要是介绍在MySQL使用运维过程中所遇到的一些坑爹的地方,予自己以做记录! 前言 因操作系统重装之后,安装了mysql5.7,而由此带来了一系列的问题,现将解决这些m ...

  6. 一文运维zookeeper

    文章目录 1. zookeeper生产环境的安装配置 1.1 软件配置 1.2 硬件配置 1.3 日志配置文件 1.4 配置三节点的zookeeper集群 2. zookeeper的监控方法 2.1 ...

  7. Linux运维跳槽必备的40道面试精华题

    过一次年,结婚.存款.父母养老,一系列向钱看的事都在碾压我们本来还挺简单的神经,但难过没有出路,唯有找到好的方法和事业方向,才能实现一步一个脚印的逆袭. 下面是一名资深Linux运维求职数十家公司总结 ...

  8. Linux运维相关目录

    Linux--相关运维配置文档目录 tcp 三次握手 yum 配置 你对linux了解多少,Linux 系统结构详解! Linux LAMP环境搭建 Centos6.7安装Apache2.4+Mysq ...

  9. 版电力系统故障录波_电力系统中的变电运维技术匹配专业中的应用

    电力系统中变电运维产生故障的主要原因分为两点: (1)人为因素.在变电运维工作的过程中,变电运维人员是其中的主体,其专业素质和责任意识直接决定着变电运维工作的整体质量,目前部分变电运维人员的安全意识和 ...

最新文章

  1. 直击灵魂!统计学知识十问十答,你都会吗?
  2. 网络服务-RSYNC
  3. java如何实现连接wifi_java-是否可以检测到您要连接的WiFi类型?
  4. python可视化窗口编程-Python可视化界面编程入门
  5. [AtCoder Regular Contest 124E] Pass to Next(dp+数学)
  6. SD卡启动盘制作软件
  7. ofo败局中唯一赚到钱的只有他?当事人回应......
  8. 日志文件管理者:Logrotate
  9. java绩效考核方案,基于jsp的职工绩效考核系统-JavaEE实现职工绩效考核系统 - java项目源码...
  10. 视频教程-2020年软考系统分析师--案例分析真题精解视频课程-软考
  11. Ace Admin前端框架笔记一概要与布局介绍
  12. 内网穿透工具之NATAPP使用教程
  13. cad(2000坐标系)转kml
  14. 适合初中文凭学的计算机技术,初中毕业学啥技术好 最吃香的手艺
  15. JS逆向加密——AES加密解密
  16. linux命令sm,Linux系统命令和使用技巧8则
  17. 三月的雨季给我带来了希望
  18. 【转载】超简单集成HMS ML Kit 人脸检测实现可爱2D贴纸
  19. n-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter convertView
  20. 习题 11.1 将例11.1的程序片断补充和改写成一个完整、正确的程序,用公用继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上。。

热门文章

  1. 核心编程9 文件和文件的输入输出 (os模块)
  2. Mac中安装git后,终端运行git出错,提示安装Xcode
  3. jQuery遍历函数总结
  4. 安德鲁斯Launcher得到的装在手机的应用程序列表
  5. 0.0 环境搭建 - PyTorch学习笔记
  6. 2.6 Word2Vec-深度学习第五课《序列模型》-Stanford吴恩达教授
  7. 第八章 神经网络表示-机器学习老师板书-斯坦福吴恩达教授
  8. 1.1 欢迎-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授
  9. 【Android工具】更新WPS全功能正版授权无广告版
  10. lua编程简单实用入门教程,用NodeMCU在OLED上显示温湿度