340 likes | 396 Views
系统服务器性能优化. 作者:夏明磊. 目 录. 具 体 优 化 方 案. 集 群 介 绍 及 演 示. 2. 3. 相 关 名 称 解 释. 1. 相关名词解释. 性能指标. 但是,不同的系统随负载增加 所表现的性能不一样. 系统 1. 系统的性能随负载的增加而增加. 系统 2. 负载指标. 相关名词解释. 并发数. 并发用户数的简称,最常用的负载指标,严格意义上讲并发数是指在某一时刻进行同一操作的用户数。. 吞吐率. 最常见的衡量系统运行快慢的运行指标,定义为应用系统在单位时间内实际处理的交易数量或页面单击数量。.
E N D
系统服务器性能优化 作者:夏明磊
目 录 具 体 优 化 方 案 集 群 介 绍 及 演 示 2 3 相 关 名 称 解 释 1
相关名词解释 性能指标 但是,不同的系统随负载增加 所表现的性能不一样 系统1 系统的性能随负载的增加而增加 系统2 负载指标
相关名词解释 并发数 并发用户数的简称,最常用的负载指标,严格意义上讲并发数是指在某一时刻进行同一操作的用户数。 吞吐率 最常见的衡量系统运行快慢的运行指标,定义为应用系统在单位时间内实际处理的交易数量或页面单击数量。
相关名词解释 响应时间 也是常见的衡量系统快慢的运行指标,定义为用户向系统请求一个页面开始到对应页面完全显示在浏览器内的时间间隔,一般说响应时间越低越好。 系统资源占用 是一个“后台”指标,在相同的负载条件下,应用程序占用资源越少越好,可以为高峰期或未来增加的负载留有余地。
相关名词解释 各指标之间的关系 考察应用系统的性能,往往关注指标发生变化时的情况,即各指标之间的关系。通过坐标吐查看系统性能,一般把负载指标作为系统的输入指标(横坐标),把运行指标或资源占用指标作为输出指标(纵坐标)。 吞吐率 响应时间 CPU占有率 崩溃点 饱和点 最大 吞吐率 崩溃点 饱和点 100% 饱和点 崩溃点 最佳 响应时间 N1 N2 并发数 并发数 N1 N2 N1 N2 并发数
目 录 集 群 介 绍 及 演 示 1 3 2 相 关 名 称 解 释 具 体 优 化 方 案
具体优化方案 一:数据库优化 • 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服务器
具体优化方案 • 数据库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 /server-status>段中使之局部化。在这种情况下,只有对这个区域的请求才会发生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/x-javascript,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.无心的对象引用保持。没有明确无误的释放对象,以致于堆增长再增长,直到没有额外的空间。 找到保持这些无意引用的源对象,改变它并释放这些对象。例如有一种查找方法: • 强迫垃圾收集,获得一个堆的对象快照。 • 进行一些操作后,强迫另一次垃圾收集并获得第二次堆的对象快照。 • 比较这两个快照,观察从第一个快照到第二个快照哪些对象在数量上有所增加。因为在快照之前强迫垃圾收集,剩下的将是所有被应用程序引用的对象,比较两个快照将准确的标识那些新创建的、保留在应用程序里的对象。 • 根据你对应用程序的认识,决定两个快照比较中,哪些对象正在无意的保持对象引用,直到你找到导致此问题的源对象。
目 录 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/jboss-web.deployer/server.xml文件,将Engine修改如下: <Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1"> ... </Engine> node1和node2分别对应相应IP的JBoss; b.修改 JBOSS_HOME/server/all/deploy/ jboss-web.deployer/META-INF/jbossservice.xml,找到<attribute name=“UseJK”>该为: <attribute name="UseJK">true</attribute> 至此JBoss集群环境基本配置完成,先启动Apache,然后启动JBoss,并进行测试。
天津博和利科技有限公司 网址: www.berheley.com 电话: 022-27058558 传真: 022-83716069 地址:天津市新技术产业园区 海泰信息广场H座205