系统稳定性优化方案1.系统优化从操作系统到WEB服务器,从数据库和SQL语句等都可以优化1.1. 操作系统检查系统的空载负荷。
空载负荷指仅安装操作系统的情况下,通过一些工具查看系统的负载。
这样做的目的是通过检查系统的运行情况,减少和屏蔽不必要的服务,最大限度的为应用系统提供更多的资源建议是通过编写脚本记录系统运行时的性能情况。
比如按占用CPU对进程排序,如果是非核心进程,则可以根据情况停止这些进程的启动。
1.2. TOMCATJA V A版本需求:必须要java 1.6及以上版本修改Tomcat目录/bin/catalina.sh文件中,找到注释文字的最后一段,敲入一个回车,加入如下的参数export JAVA_OPTS="-server -Xms3096M -Xmx3096M -Xmn1024m -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly配置参数说明:1.-server 表示TOMCAT以产品模式启动2.-Xms和-Xmx为JVM的值。
需要测试配置的值是否有效。
在命令提示符下键入如下命令:Java -Xmx3096M -version如果显示如下所示,则说明配置值有效如果显示如下所示,则说明配置值无效3.-Xmn 推荐配置为整个堆的3/84.-Xss 设定每个线程的堆栈大小。
一般不易设置超过1M,要不然容易出现out ofmemory5.-XX:+AggressiveOpts 当JDK版本升级时,都会使用最新加入的优化技术6.-XX:+UseBiasedLocking 启用一个优化了的线程锁,对线程处理自动进行最优调配。
7. -XX:PermSize=128M-XX:MaxPermSize=2024M PermSize是物理内存的1/64,MaxPermSize 是物理内存的1/48.-XX:LargePageSizeInBytes 指定Java heap的分页页面大小9.-XX:CMSInitiatingOccupancyFraction基本上满足(Xmx-Xmn)*(100- CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion failed。
比如设置为40,则(3096-1024)*0.6=1243 ,大于Xmn。
修改Tomcat目录/conf/server.xml文件中内容<Connector port="8084" maxHttpHeaderSize="8192"maxThreads="600" minSpareThreads="100" maxSpareThreads="200"enableLookups="false" redirectPort="8445" acceptCount="200"connectionTimeout="20000" disableUploadTimeout="true"其中maxThreads表示:Tomcat使用线程来处理接收的每个请求。
这个值表示Tomcat 可创建的最大的线程数。
acceptCount表示:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
connnectionTimeout表示:网络连接超时,单位:毫秒。
设置为0表示永不超时,这样设置有隐患的。
通常可设置为30000毫秒。
minSpareThreads表示:Tomcat初始化时创建的线程数。
maxSpareThreads表示:一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
1.3. 数据库和SQL如果数据库是单独的服务器,则建议SGA配置为物理内存的80%。
SQL优化原则:根据where子句中的字段创建相应的索引或复合索引。
哪些字段包括在复合索引?字段的值具有明显的唯一性。
比如日期、GUID等。
有些字段的取值范围有限,比如取值范围是0-5,或真假等,这样的字段就不用放到索引中复合索引和单一索引。
如果WHERE子句中经常是字段1和字段3作为检索条件,则创建复合索引,包括字段1和字段3;如果WHERE子句中是字段2作为检索条件,则创建单一索引,即以字段2为索引2.系统异常宕机分析步骤2.1. 简述本章节适用于有一定周期性发生的系统异常宕机情况。
从以下组件/系统分析可能引起宕机:应用程序、数据库、硬件/网络、操作系统、其它2.1.1.必要的前置条件有最近一段时间的系统运行时的性能情况。
性能情况包括如下信息点:➢系统运行时的负载➢内存占用情况➢CPU占用情况➢磁盘空闲空间因此要编写相应的性能监控脚本来记录系统运行时的性能情况。
性能监控脚本应满足如下要求:➢执行监控脚本的周期为分钟级(在不影响系统整体性能的前提下)。
比如每1分钟执行一次脚本,以便记录当前系统的性能情况。
➢监控脚本要将当前系统情况的信息保存到文件中,以便事后分析➢按天存放监控脚本产生的性能情况。
➢至少要保留连续30天的性能日志文件(如果磁盘空间足够的话,建议可以保留更长时间的性能日志文件)2.2. 从以下几方面来分析宕机的原因。
2.2.1.应用系统和WEB服务器必要的前置条件:在执行更新部署包前需要备份相应的文件引起宕机的可能原因包括:2.2.2.应用系统更新常见的情况是应用系统已经正常运行了一段时间,在更新某个部署包后出现了宕机。
针对这种情况的检查步骤是:A.检查catalina.out等应用级日志文件,看是否有明显的异常信息。
如果有异常信息且与部署包的模块有关,则建议将应用程序恢复到部署前的版本。
因此要求在执行更新部署包前需要备份相应的文件B.如果步骤A没有发现异常,则建议询问开放人员,了解部署包是否有需要长时间执行才能完成的SQL。
如果有,则建议将应用程序恢复到部署前的版本C.如果是月末或月初,则需要考虑是否有定时任务同时执行或某些定时任务占用太多资源。
应该从catalina.out等应用级日志文件中检查。
如果有,则考虑是否将定时任务的执行时间分开或优化SQL2.2.3.WEB服务器的配置参数检查WEB服务器的配置参数中的最大线程数、数据库的连接池数量等参数是否过小2.2.4.业务量的增长某项业务涉及的数据出现了爆发式增长,引起执行相关的操作占用大量系统资源。
2.3. 数据库引起宕机的可能原因包括:➢常见的情况是某关键数据表的数据大量增加,导致占用资源太多➢错误修改了数据库配置,比如重新分配了SGA、设置日志空间大小等。
➢没有执行某些关键的数据库补丁。
定期检查ORACLE发布的补丁包,并根据当前数据库版本下载相应补丁包。
执行补丁包需要按照补丁包的说明来更新。
更新后,需要核实是否执行成功2.4. 硬件和网络常见情况是由于硬件出现故障导致宕机。
由硬件工程师查询系统日志或到服务器前查看是否有报错提示。
2.5. 操作系统常见情况是系统自带的软件或服务占用过多的系统资源或安装的某些软件占用过多系统资源检查点包括:➢是否更新了操作系统补丁。
某些操作系统的初始版本有BUG,操作系统厂家发布了相应的补丁。
建议是定期安装补丁➢是否打开或关闭了某个系统级服务。
某些操作系统自带的服务(比如FTP等)是随着系统一起启动的,如果不需要这些服务,建议是关闭,以释放更多的内存资源。
➢是否有进程占用太多CPU。
通过性能监控脚本可以查看哪些进程占用过多的CPU,如果是与业务无关的进程,则建议关闭这些进程。
3.备份3.1. 应用程序/文件级备份对linux/unix操作系统的文件或目录进行备份/迁移。
适用于以下情况:➢部署包需要更新多个目录的多个文件➢日常备份应用系统所在的目录➢其它文件级备份操作➢将服务器上的文件/目录迁移到其它服务器上(相同的操作系统)场景1:备份当前目录下的web子目录下的全部目录和文件命令如下:tar -czf web_20130604.tar.gz web参数说明:➢-czf 表示是执行压缩操作➢Web_20130604.tar.gz 是目标文件名。
注意:因为之前的参数带z,所以扩展名是.tar.gz ➢Web是要备份的目录名,即源目录名场景2:查看压缩文件的内容执行了压缩后,想查看压缩文件的文件和目录结构方法1:从服务器下载到windows电脑,用好压或winrar等压缩软件打开查看方法2:在服务器上执行tar -tlf web_20130604.tar.gz场景3:从备份文件中恢复/解压命令如下:Tar -xzf web_20130604.tar.gz参数说明:➢-xzf 表示是执行解压操作➢Web_20130604.tar.gz 是文件名。
即从这个文件中解压。
由于之前Web_20130604.tar.gz是对web目录执行的压缩,因此解压时,会在当前目录下创建web子目录3.2. 数据库备份场景1:用exp备份整个数据库通过oracle自带的exp命令执行数据库导出(备份)(以oracle用户登录系统)命令如下:exp partner_dev/partner_dev BUFFER=64000 FILE=/datadg/data/test/partner_dev_20131126.dmplog=/datadg/data/test/partner_dev_20131126.log OWNER=partner_dev参数说明:➢partner_dev/partner_dev 是连接数据库的用户名和密码。
如果是在非数据库本机上执行还需要增加@服务器名的参数➢FILE=/datadg/data/test/partner_dev_20131126.dmp 是指定备份文件的文件名(带全路径) ➢log=/datadg/data/test/partner_dev_20131126.log 是指定执行备份时的日志文件,即将执行备份的操作保存到文件中,以便备份完毕后检查是否中途发生错误。