具体优化方案 - 天津博和利软件设计有限公司

Download Report

Transcript 具体优化方案 - 天津博和利软件设计有限公司

系统服务器性能优化
作者:夏明磊
目
1
相 关 名 称 解 释
2
具 体 优 化 方 案
3
集 群 介 绍 及 演 示
录
相关名词解释
性能指标
系统1
系统2
负载指标
相关名词解释
并发数
并发用户数的简称,最常用的负载指标,严格
意义上讲并发数是指在某一时刻进行同一操作的
用户数。
吞吐率
最常见的衡量系统运行快慢的运行指标,定义为
应用系统在单位时间内实际处理的交易数量或页面单
击数量。
相关名词解释
响应时间
也是常见的衡量系统快慢的运行指标,定义为用户向
系统请求一个页面开始到对应页面完全显示在浏览器内
的时间间隔,一般说响应时间越低越好。
系统资源占用
是一个“后台”指标,在相同的负载条件下,应用程序
占用资源越少越好,可以为高峰期或未来增加的负载留有
余地。
相关名词解释
各指标之间的关系
考察应用系统的性能,往往关注指标发生变化时的情况,即
各指标之间的关系。通过坐标吐查看系统性能,一般把负载指标
作为系统的输入指标(横坐标),把运行指标或资源占用指标作
为输出指标(纵坐标)。
吞吐率
最大
响应时间
饱和点
CPU占有率
崩溃点
100%
饱和点
崩溃点
吞吐率
饱和点
崩溃点
最佳
响应时间
N1
N2 并发数
N1
N2 并发数
N1
N2 并发数
目 录
1
相 关 名 称 解 释
2
具 体 优 化 方 案
3
集 群 介 绍 及 演 示
具体优化方案
一:数据库优化
1.数据库连接池设置
在应用程序中找到dbconfiguration.properties
文件,查看其中的参数:
#数据库连接池最小连接数
c3p0.minPoolSize=15
#数据库连接池最大连接数
c3p0.maxPoolSize=200
#数据库连接池初始化数
c3p0.initialPoolSize=15
具体优化方案
修改oracle数据库默认链接数,适当调大;
ORACLE的连接数(sessions)与其参数文件中的进程数(process)有
关,它们的关系如下:
sessions=(1.1*process+5) 。
具体修改步骤:
以sysdba身份登陆数据库客户端
查询目前连接数: show parameter processes;
更改系统连接数:
alter system set processes=1000 scope=spfile;
alter system set sessions=1200 scope=spfile;
创建pfile: create pfile from spfile;
重启Oracle服务或重启Oracle服务器
具体优化方案
2. 数据库SGA内存块优化
SGA是oracle最主要的内存块, 32位系统下SGA最
大不能超过1.7G,SGA块中主要包括数据缓冲区、大
型池、java池和共享池等几部分,oracle(适用于
oracle10g以上)按照他们不同作用自动分配占用SGA
内存块的比例。
具体优化方案
对数据库内存的优化主要是适当调整SGA内存块的大小以
及每一部分的分配比例。数据库管理员可以根据数据库运行
状况调整数据库系统全局区(SGA区)的大小;还可以调整程
序全局区(PGA区)的大小。需要注意的是,SGA区不是越大
越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存
的页面交换,这样反而会降低系统。
建议:SGA设为操作系统内存的一半
具体优化方案
二:Apache优化
避免apache对DNS进行查询。
设置HostnameLookups on,它会带来延迟,因为对每一个请求都
需要作一次DNS查询。最好是在其他机器上,而不是在web服务器
上执行处理和其他日志统计操作,以免影响服务器的性能。
可以把HostnameLookups指令包含在<Location /serverstatus>段中使之局部化。在这种情况下,只有对这个区域的请求
才会发生DNS查询。下例禁止除了.html和.cgi以外的所有DNS查
询:
HostnameLookups off
<Files ~ "\.(html|cgi)$">
HostnameLookups on
</Files>
具体优化方案
禁用符合链接验证
如果网站空间中没有使用 Options FollowSymLinks ,或使用了
Options SymLinksIfOwnerMatch ,Apache就必须执行额外的系统调
用以验证符号连接。文件名的每一个组成部分都需要一个额外的调用
。例如,如果设置了:
DocumentRoot /www/htdocs
<Directory />
Options SymLinksIfOwnerMatch
</Directory>
在请求“/index.html”时,Apache将对“/www”、“/www/htdocs”、
“/www/htdocs/index.html”执行lstat()调用。而且lstat()的执行结果不被
缓存,因此对每一个请求都要执行一次。这样就造成Apache响应请
求的时间就会延长,为了得到最佳性能,可以放弃对符号连接的保护
,在所有地方都设置FollowSymLinks ,并放弃使用
SymLinksIfOwnerMatch 。
具体优化方案
Apache连接参数的调整
MPM(Multi-Processing Modules,多道处理模块 )
 workerMPM使用多个子进程,每个子进程中又有多个线程。
每个线程处理一个请求。该MPM通常对高流量的服务器是一
个不错的选择。因为它比workerMPM需要更少的内存且更具
有伸缩性。
 preforkMPM使用多个子进程,但每个子进程并不包含多线程
。每个进程只处理一个链接。在许多系统上它的速度和
workerMPM一样快,但是需要更多的内存。这种无线程的设
计在某些情况下优于workerMPM:它可以应用于不具备线程
安全的第三方模块,且在不支持线程调试的平台上易于调试
,而且还具有比workerMPM更高的稳定性。
具体优化方案
下面是prefork默认的参数配置:
<IfModule prefork.c>
StartServers 5
#初始进程数
MinSpareServers 5
#最小空闲进程数
MaxSpareServers 10
#最大进程数
MaxClients 150
#Apache可以同时处理的请
求数
MaxRequestsPerChild 0 #每个进程最多可处理的
子进程数
</IfModule>
具体优化方案
prefork的工作原理:
控制进程在最初建立StartServers个子进程后,
为了满足MinSpareServers设置的需要,创建一个
进程,等待一秒钟,继续创建第二个,等待一秒
钟,继而创建四个,如此按指数级增加创建的进
程数,最多达到每秒32个,直到满足
MinSpareServers设置的值为止,这也就是预派生
(prefork)的由来。这种模式可以使得不必在请求
到来时再产生新的进程,从而减小了系统开销以
增加性能。
具体优化方案
MaxSpareServers设置了最大的空闲进程数,如果空闲进
程数大于这个值,Apache会自动kill某些多余进程。这个值一
般不要设的过大,但如果设的比MinSpareServers小,Apache
会自动把它调整为MinSpareServers+1。如果站点负载较大的
话,可考虑同时加大 MinSpareServers和MaxSpareServers。
MaxRequestsPerChild设置的是每个子进程可以处理的请求
数。每个子进程在处理了MaxRequestsPerChild个请求后将自
动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0
可以使每个子进程处理更多的请求,但如果设成非零值也有
两点重要的好处:
1、可防止意外的内存卸漏;
2、在服务器负载下降的时侯会自动减少子进程数。
具体优化方案
MaxClients是这些指令中最为重要的一个,它设定的
就是Apache可以同时处理的请求,这是对Apache性能影
响最大的参数. 缺省的150是远远不够的,如果请求总数
已达到这个值,那么下面的请求就要排队,直到某个已处
理请求完毕。这就是为什么系统资源还剩下很多,而http
访问却很慢的主要原因。
系统管理员可以根据硬件配置和负载情况来动态调整
这个值,虽然理论上这个值越大,可以处理的请求就越多,
但Apache默认的限制是不能大于256。如果把这个值设为
大于256那么Apache将无法起动。
具体优化方案
三:Jboss优化
主要是优化jvm虚拟机参数,适当扩大java运行是可以分配的
内存数。
编辑<jboss>/bin/run.conf, 在文件的底部找到对参数
JAVA_OPTS进行设置的地方。这个参数会最后传到jvm里。
其中
-Xms512m 代表jvm最少用 512m内存
-Xmx1024m 代表jvm最多使用 1024m内存
修改这个两参数,给jvm分配适当的内存,一般为服务器
的3/4内存量,推荐至少使用4G内存。
另外添加两个参数,可以让服务并行回收内存空间。
-XX:+UseParallelGC
-XX:+UseParallelOldGC
具体优化方案
起用JBoss内的tomcat对传输数据的压缩功能
系统里用到的大量javascript、css等,为了减少传输时间,
可以起用压缩功能。方法是:
打开server.xml,找到Connector元素,添加如下配置:
compression=”on” compressionMinSize=”2048″
noCompressionUserAgents=”gozilla, traviata”
compressableMimeType=”text/html,text/xml,text/javascript,
text/css, text/plain,application/xhtml+xml,application/xjavascript,application/javascript,text/xhtml”/>
具体优化方案
降低jboss输出日志的等级
打开 <jboss>/server/default/conf/jboss-log4j.xml ,这是
一个log4j的配置文件。日志输出的太多,会导致服务器性能降
低,所以减少不必要的日志输出。方法大体如下:
1. 找到 name=”org.jboss” 的category 元素,设置里面
的priority元素为 <priority value=”INFO” />
2. 建一个新的category,内容为
<category name=”javax.faces”>
<priority value=”INFO” /></category>
log4j 还能够将不同的日志输入到不同的地方,为了以后
维护方便,应该将不同 category的日志输入到不同的文件里。
具体优化方案
四:Tomcat优化
Java虚拟机内存设置:
Windows下,在文件
{tomcat_home}/bin/catalina.bat,Unix下,在
文件{tomcat_home}/bin/catalina.sh的前面,
增加如下设置:
JAVA_OPTS=“-Xms[初始化内存大小] –
Xmx[可以使用的最大内存]”
另外需要考虑的是Java提供的垃圾回收机制。
一次完全的垃圾收集应该不超过 3-5 秒,堆的
大小和内存的需要一致,完全收集就很快,但
具体优化方案
Tomcat日志配置
设置log4j日志级别,控制打印日志文件的大小。特别
是在系统正式应用的时候,日志的级别设置太高,会造
成系统性能下降和资源的浪费。但我们在系统开发过程
中,可以把日志级别调高,便于查找问题所在。
日志级别通常有六种:LOG、DEBUG、INFO、WARN、
ERROR 和fatal,下面是控制日志级别为“warn”级别的设
置 log4j.logger.com.berheley=WARN
log4j.logger.org.springframework=WARN
log4j.logger.org.hibernate=WARN
具体优化方案
Java内存溢出的几种情况
1.JVM有真实的内存泄漏,导致此JVM堆在内部实现时产生
了一个Bug。出现这种情况的可能性极低。JVM都经过充分
的测试,如果有人发现这种bug,它将绝对是最高的优先级。
2.没有为应用程序在运行时给予足够多的可用内存。这种情
况,有两种可能的方案:
 增加JVM堆可用大小,设置JVM参数。
 减少你的应用程序所需的内存总量,例如使用了许多
大的缓冲区。
具体优化方案
3.
无心的对象引用保持。没有明确无误的释放对象,以致于堆增
长再增长,直到没有额外的空间。
找到保持这些无意引用的源对象,改变它并释放这些对象。
例如有一种查找方法:
a) 强迫垃圾收集,获得一个堆的对象快照。
b) 进行一些操作后,强迫另一次垃圾收集并获得第二次堆的对
象快照。
c) 比较这两个快照,观察从第一个快照到第二个快照哪些对象
在数量上有所增加。因为在快照之前强迫垃圾收集,剩下的
将是所有被应用程序引用的对象,比较两个快照将准确的标
识那些新创建的、保留在应用程序里的对象。
d) 根据你对应用程序的认识,决定两个快照比较中,哪些对象
正在无意的保持对象引用,直到你找到导致此问题的源对象。
目 录
1
2
3
相 关 名 称 解 释
具 体 优 化 方 案
集 群 介 绍 及 演 示
集群介绍及演示
计算机集群简称集群,是一种计算机系统,它通过软件
和/或硬体把多台计算机以特殊的方式连接起来,协作完成
指定的任务。对于用户而言,使用一个集群系统就象使用一
台计算机一样。位于集群系统中的计算机通常称为节点,节
点直接通常采用以太网或专用网络连接。
与单一服务实体相比较,集群提供了以下两个关键特性:
•可扩展性--集群的性能不限于单一的服务实体,新的服
务实体可以动态地加入到集群,从而增强集群的性能。
•高可用性--集群通过服务实体冗余使客户端免于轻易遇
到out of service的警告。在集群中,同样的服务可以由多个服
务实体提供。如果一个服务实体失败了,另一个服务实体会
接管失败的服务实体。集群提供的从一个出错的服务实体恢
复到另一个服务实体的功能增强了应用的可用性。
集群介绍及演示
集群两大技术
集群地址--集群由多个服务实体组成,集群客户端通过访
问集群的集群地址获取集群内部各服务实体的功能。具有单
一集群地址(也叫单一影像)是集群的一个基本特征。维护
集群地址的设置被称为负载均衡器。负载均衡器内部负责管
理各个服务实体的加入和退出,外部负责集群地址向内部服
务实体地址的转换。集群中只有一个服务实体工作,当正在
工作的服务实体发生故障时,负载均衡器把后来的任务转向
另外一个服务实体。
内部通信--为了能协同工作、实现负载均衡和错误恢复,
集群各实体间必须时常通信,比如负载均衡器对服务实体心
跳测试信息、服务实体间任务执行上下文信息的通信。
集群介绍及演示
负载均衡基本配置
apache+JBoss负载的基本原理:apache使用JK进行内部通
讯,按照不同的负载配置向集群中的每一个节点分发请求,
以达到加强负载的效果。
基本的负载均衡配置需要用到的模块和配置文件包括:
JK模块:需要单独下载,把扩展名改成.so后,放到
apache的modules目录中。
JK加载配置文件:用来加载JK模块和设置日志信息。
URL路由配置文件:配置哪些请求需要分发。
负载均衡器:配置集群服务器节点。
集群介绍及演示
JK加载配置文件:mod-jk.conf
# 加载mod_jk.so模块
LoadModule jk_module modules/mod_jk.so
# 配置负载均衡器
JkWorkersFile conf/workers.properties
# 配置日志文件存放位置
JkLogFile logs/mod_jk.log
#设置日志文件的级别[debug/error/info]
JkLogLevel info
# 选择日志文件的日期格式
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
# 设置url路由
JkMountFile conf/uriworkermap.properties
集群介绍及演示
负载均衡器配置
# 定义一个worker集合,每个worker就是一个Tomcat实例
worker.list=loadbalancer,status
# Define Node1
# 配置加入集群的机器IP地址和web服务器端口号
worker.node209.port=8019
worker.node209.host=192.168.1.250
# ajp13用来与Tomcat进行通讯的协议
worker.node209.type=ajp13
# 配置该台机器负载比例
worker.node209.lbfactor=1
# 配置数据文件的缓存大小,只有当在多线程的web server
中使用JK时, # 此属性才有效
worker.node209.cachesize=10
集群介绍及演示
# 加载负载均衡器,使之生效
worker.loadbalancer.type=lb
# 设置哪些节点加入负载中
worker.loadbalancer.balance_workers=node212,node209
# 设置session是否启用“粘着的”,集群中session可以
设置两种状#态:复制,粘着。
#sticky_session值为“1”或“true”表示“粘着”,值为“0”
或“false”表#示“复制”
worker.loadbalancer.sticky_session=1
# worker.list=loadbalancer
# Status worker for managing load balancer
worker.status.type=status
集群介绍及演示
修改JBoss配置文件
a.修改JBOSS_HOME/server/all/deploy/jbossweb.deployer/server.xml文件,将Engine 修改如下:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node
1">
...
</Engine>
node1和node2分别对应相应IP的JBoss;
b.修改 JBOSS_HOME/server/all/deploy/ jboss-web.deployer /METAINF/jbossservice.xml,找到<attribute name=“UseJK”>该为:
<attribute name="UseJK">true</attribute>
至此JBoss集群环境基本配置完成,先启动Apache,然后启动JBoss,
并进行测试。
天津博和利科技有限公司
网址: www.berheley.com
电话: 022-27058558
传真: 022-83716069
地址:天津市新技术产业园区
海泰信息广场H座205