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