如何正确维护服务器,第1张

摘要:维护服务器的目的是为了让服务器的性能保持最佳状态,发现问题及时解决,没有问题也可以对相关的应用和配置进行调优。服务器日常维护内容包括硬件维护和软件维护,维护服务器时,首先要做好安全检测,进行数据备份,然后做好系统优化和独立服务器性能优化,接下来就和小编一起来看看吧。服务器日常维护内容有哪些

1、硬件维护

硬件维护就是指对服务器的硬件进行检测、更换、升级,最常见的是升级CPU、内存和增加磁盘。其中磁盘扩容是最常见的,因为服务运行的时间越长,产生的数据量就越大,就需要用更多的磁盘来储存。

2、软件维护

(1)操作系统升级

服务器和PC没有本质区别,也运行着基本的操作系统,因此需要升级各种补丁来保护系统安全,规避可能能系统错误。

(2)软件维护

软件即指服务器上运行的各种软件,由于服务器提供的服务往往都在增加,因此提供服务的软件也需要升级,修复BUG,甚至重新编写。

(3)数据维护

数据是服务器的核心,所以做好数据备份是一个经常性的工作。

(4)安全维护

系统往往会存在还没有发现的安全漏洞,通过检查数据库、系统的运行日志,甄别攻击行为,并进行防范。及时更新系统的补丁,防止黑客或病毒利用漏洞对服务器进行攻击。

(5)日志检查

对系统审核日志,进行检查,看是否有异常的访问,可以利用软件来进行审计或设置好系统自带的审核日志。

(6)服务器资源检查

资源包括硬盘、cpu、内存、带宽负载情况进行查看,要更具网站的访问量提前把资源配置好。

如何正确维护服务器

1、安全检测

服务器关系到线上所有的重要信息,十分重要,日常安全检测必不可少。具体的检测内容包括以下几个方面:检查服务器启动项是不是正常,重点查看系统目录和重要的应用程序权限是不是有更改;检查服务器状态,打开服务器进程管理器,查看具体的CPU使用情况及任务进程是否有异常;查看服务器端口使用情况,看看是否有未使用端口,及时关闭防止黑客利用;检查系统服务应用,查看已启动的服务是否有异常。另外,可以进行周期检查相关日志,安全策略及系统文件。

2、数据备份

独立服务器日常维护备份数据是必须要更新的。建立周期将系统数据每月备份一次,应用程序数据两周单独备份一次,并确保数据安全后最好能够转储一份,这样即使出现数据损失也能够及时恢复数据。这种备份基本上采用的是全备份,因此在备份数据上可以只保留上次备份数据和此次备份数据即可。

3、系统优化

独立服务器运行久了,会产生很多系统文件,可以卸载一些不用的程序组件,释放独立服务器的空间;删除一些自启动的程序,减少读取时间,从而提升服务器的响应速度,优化内存。

4、独立服务器性能优化

调整服务器缓存策略,对访问流量进行适当的策略限制,比如站点带宽限制,保持http的连接,起用http压缩等。独立服务器性能优化一般周期性或特殊时间段维护较为常见。

性能:

1、 启用FastInfoset(快速信息集)

webservice的性能实在是不敢恭维。曾经因为webservice吞吐量上不去,对webservice进行了一些性能方面的优化,采用了FastInfoset,效果很明显,极端条件下的大数据量传输,性能提高60%,他可以减少传输成本,序列化成本和xml解析成本。

Cxf提供了FastInfoset协商机制,实现类见orgapachecxffeatureFastInfosetFeature,在bus中启用如下配置:

<cxf:features><cxf:fastinfoset force="false"/></cxf:features>

Force=false表示服务端和客户端第一次通信时会协商(通过检查标准的HTTP头的Accept字段,值为MIME类型的application/fastinfoset)是否启用FastInfoset支持,如果客户端不支持,则不启用快速信息集。

需要在pom中添加依赖:

<dependency>

<groupId>comsunxmlfastinfoset</groupId>

<artifactId>FastInfoset</artifactId>

<version>129</version>

<type>jar</type>

<scope>compile</scope>

</dependency>

FastInfoset参考:http://javasuncom/developer/technicalArticles/xml/fastinfoset/

client和service端都要配置

2、 启用gzip压缩支持

客户端和服务器端是否使用Gzip压缩,也是基于http协议协商的(检查请求header 中是否有Accept-encoding:gzip)。但是这里需要仔细权衡下。对于小数据量,启用gzip压缩支持是吃力不讨好的行为,数据量很小的时候,gzip压缩结果不明显,还浪费cpu。我们需要权衡数据大小,按照经验设置threshold为101024byte。

在bus中启用如下配置:

<bean class="orgapachecxftransportcommongzipGZIPFeature ">

<property name="threshold"><value>10240</value></property>

</bean>

官方文档指定是是配置orgapachecxftransporthttpgzipGZIPFeature,但是这个类会找不到,可能是官方文档年久失修,造成一些混乱。官方文档中也没提示指定threshold,请参考GZIPFeature源代码。

参考http://cxfapacheorg/docs/featureslisthtml

3、 使用slf4j代替cxf默认日志组件

CXF 默认使用 javautillogging 作为日志打印组件,其性能我就不过多评价,也不太便于我们做统一日志管理。目前系统使用的slf4j作为日志打印组件,替换如下:

在classpath中加入 META-INF/cxf/orgapachecxfLogger 文件,文件内容为

orgapachecxfcommonloggingSlf4jLogger

4、 测试中启用日志

bus中加入<cxf:logging/>,请在测试环境中启用有助于debug

补充:

1、如何自定义返回码:

请求在service中处理遇到异常后,会调用请求链中所有拦截器的handleFault方法,参考PhaseInterceptorChain#unwind,然后判断请求是否单向请求,如果不是,则构建异常请求链,并构建异常message对象,调用异常请求链中的handleMessage 方法(参考:AbstractFaultChainInitiatorObserver)

JAXWSMethodInvoker转发soap请求到指定对象的方法,如果在请求处理失败,调用updateHeader方法,把请求时的soap header放入返回header中。但是不同通过继承JAXWSMethodInvoker来实现清除异常时soap header也返回给客户端的问题,因为JAXWSMethodInvoker没有采用注入的机制(JaxWsServerFactoryBean#createInvoker)也没有chain异常时,会由这些拦截器处理返回请求:

setup [ServerPolicyOutFaultInterceptor]

prepare-send [MessageSenderInterceptor, Soap11FaultOutInterceptor]

pre-stream [LoggingOutInterceptor, StaxOutInterceptor]

pre-protocol [WebFaultOutInterceptor]

write [SoapOutInterceptor]

拦截器初始化类OutFaultChainInitiatorObserver

我们可以在异常链中加入清理soap header的拦截器SoapHeaderOutFilterInterceptor,清理掉在系统异常时soapheader中有信息的问题。

返回错误状态码,在执行Soap11FaultOutInterceptor拦截器中被写死。

messageput(orgapachecxfmessageMessageRESPONSE_CODE, new Integer(500));

为了使返回数据中有错误码,需要在Soap11FaultOutInterceptor后面加入拦截器

2、在项目测试时遇到一个报错invalid LOC header (bad signature),这个问题是因为jar包损坏照成的,虽然构建路径中有这个jar,但是还是会出现loadClass失败,清理maven 本地仓库目录的jar,修改pom(比如加上一空行)让m2e重新加载。

3、Cxf中有一个很不错的特性,支持javascript访问soap webservice,客户端访问http://localhost:8080/cxf/HelloWorldjs类似的请求,会生成javascript 客户端,js编程时就可以使用此客户端提供的对象,启用此功能需要在引入

<import resource="classpath:META-INF/cxf/cxf-extension-javascript-clientxml" />并且在依赖中加入:

<dependency>

<groupId>orgapachecxf</groupId>

<artifactId>cxf-rt-javascript</artifactId>

<version>241</version>

<type>jar</type>

<scope>compile</scope>

</dependency>

[检测工具]

为了得到完整的调试结果,建议你采用 ApacheBench 或者 httperf之类的软件。如果你对非 LAMP 架构的服务器测试有兴趣的话,建议你采用微软的免费软件: Web Application Stress Tool(需要 NT 或者 2000)。 (其它服务器测试工具)

检测 Apache ,采用 top d 1 显示所有进程的 CPU 和内存情况。另外,还采用 apachectl status 命令

[硬件优化]

1、升级硬件的一般规则:对于 PHP 脚本而言,主要的瓶颈是 CPU ,对于静态页面而言,瓶颈是内存和网络。一台 400 Mhz 的普通奔腾机器所下载的静态页面就能让 T3 专线(45Mbps)饱和。

2、采用 hdparm 来优化磁盘,一般能提升 IDE 磁盘读写性能 200%,但是对 SCSI 硬盘也有效果。(不同类型的硬盘对比)

[策略优化]

3、Apache 处理 PHP 脚本的速度要比静态页面慢 2-10 倍,因此尽量采用多的静态页面,少的脚本。

4、PHP 脚本如果不做缓冲,每次调用都需要编译,因此,安装一个 PHP 缓冲产品能提升 25-100% 的性能。

5、如果你采用了 Linux 系统,建议升级内核到 24,因为静态页面由内核服务。

6、另外一项缓冲技术是把不常修改的 PHP 页面采用 HTML 缓冲输出。

7、不要在 Web 服务器上运行 X-Windows ,关掉没有必要运行的进程。

8、如果能够用文本就不要用图像,尽量减小的尺寸。

9、分散负载,把数据库服务器放到另外的机器上去。采用另外低端的机器服务和 HTML 页面,如果所有的静态页面在另外一台服务器上处理,可以设置 httpdconf 中的 KeepAlives 为 off ,来减少断开连接的时间。

10、以上所有的方法都是针对单机而言的,如果你觉得系统还是不够快,可以采用集群,负载均衡,缓冲技术。采用 Squid 作为缓冲,配置 Squid 的方法。

[编译优化]

11、把基于文件的会话切换到基于共享内存的会话。编译 PHP 时采用 --with-mm 选项,在 phpini 中设置 set sessionsave_handler=mm 。这个简单的修改能让会话管理时间缩短一半。

12、采用最新版本的 Apache ,并把 PHP 编译其中,或者采用 DSO 模式,不要采用 CGI 方式。

13、编译 PHP 时,建议采用如下的参数:

--enable-inline-optimization --disable-debug

[配置优化]

14、修改 httpdconf : 

# 关闭 DNS lookups,PHP 脚本只拿 IP 地址

HostnameLookups off

15、如果网络拥挤,CPU 资源不够用,采用 PHP 的 HTML 压缩功能:

output_handler = ob_gzhandler

PHP 404 的用户请不要使用,因为存在内存泄漏问题。

16、修改 httpdconf 中的 SendBufferSize 为你最大的页面文件的大小。加大内核的 TCP/IP 写缓冲大小。

17、采用数据库的持久连接时,不要把 MaxRequestsPerChild 设置得太大。

[第三方软件优化]

18、如果喜欢从修改 Apache 源码入手,可以安装 lingerd。在页面产生和发送后,每个 Apache 进程都会浪费一段时光在客户连接上,Lingerd 能接管这项工作,让 Apache 迅速服务下一个客户请求。

19、如果你足够勇敢的话,还可以采用 Silicon Graphics 的 Accelerated Apache 补丁。这个工程能使 Apache 13 快 10 倍,使 Apache 20 快 4 倍。

安装一个 PHP 缓冲产品能提升 25-100% 的性能。

[Linux系统优化]

1清理服务器磁盘碎片:

不论Linux文件系统采用什么文件格式(ext3、JFS、XFS、ReiserFS )、何种类型的硬盘(IDE 、SCSI),随着时间的推移文件系统都会趋向于碎片化。ext3、JFS等高级文件系统可以减少文件系统的碎片化,但是并没有消除。在繁忙的数据库服务器中,随着时间的过去,文件碎片化将降低硬盘性能,硬盘性能从硬盘读出或写入数据时才能注意到。时间长了会发现每个磁盘上确实积累了非常多的垃圾文件,释放磁盘空间可以帮助系统更好地工作。Linux最好的整理磁盘碎片的方法是做一个完全的备份,重新格式化分区,然后从备份恢复文件。但是对于7×24小时工作关键任务服务器来说是比较困难的。Kleandisk是一个高效的磁盘清理工具,它能把磁盘上的文件分成不同的"组",比如把所有的"core"文件归成一组(Group),这样要删除所有core文件时只要删除这个组就行了。core文件是当软件运行出错时产生的文件,它对于软件开发人员比较有用,对于其他用户(比如电子邮件服务器)却没有任何意义。因此,如果没有软件开发的需要,见到core文件就可以将其删除。

2、开启硬盘DMA

现在使用的IDE硬盘基本支持DMA66/100/133(直接内存读取)但是Linux发行版本安装后一般没有打开,可以 /etc/rcd/rclocal 最後面加上一行: /sbin/hdparm -d1 –x66 -c3 -m16 /dev/hda 这样以后每次开机,硬盘的 DMA 就会开启,不必每次手动设定。添加前后你可以使用命令:hdparm -Tt /dev/hda 来测试对比一下。

3、调整缓冲区刷新参数

Linux内核中,包含了一些对于系统运行态的可设置参数。缓冲刷新的参数可以通过调整 /proc/sys/vm/bdflush文件来完成,这个文件的格式是这样的:

每一栏是一个参数,其中最重要的是前面几个参数。第一个数字是在"dirty"缓冲区达到多少的时候强制唤醒bdflush进程刷新硬盘,第二个数字是每次让bdflush进程刷新多少个dirty块。所谓dirty块是必须写到磁盘中的缓存块。接下来的参数是每次允许bd flush将多少个内存块排入空闲的缓冲块列表。 以上值为RHEL 40中的缺省值。可以使用两种方法修改:

(1)使用命令

# echo "100 128 128 512 5000 3000 60 0 0">/proc/sys/vm/bdflush

并将这条命令加到/etc/rcd/rclocal文件中去。

(2)在/etc/sysctlconf 文件中加入如下行:

以上的设置加大了缓冲区大小,降低了bdflush被启动的频度,VFS的缓冲刷新机制是Linux文件系统高效的原因之一。

4、优化输入输出

I/O程序对Linux系统性能也是相当重要的,网络硬件I/O对服务器尤其重要。现在大多数Linux服务器使用10/100 Mb以太网。如果有较重的网络负载,则可以考虑千兆以太网卡。如果没有能力购买千兆网卡的话:可以使用多块网卡虚拟成为一块网卡,具有相同的IP地址。这项技术,在Linux中,这种技术称为Bonding。Bonding在Linux24以上内核中已经包含了,只需要在编译的时候把网络设备选项中的 Bonding driver support选中见图1。当然利用Bonding技术配置双网卡绑定的前提条件是两块网卡芯片组型号相同,并且都具备独立的BIOS芯片。

然后,重新编译核心,重新起动计算机,执行如下命令:

现在两块网卡已经象一块一样工作了。这样可以提高集群节点间的数据传输bonding对于服务器来是个比较好的选择,在没有千兆网卡时,用两块100兆网卡作bonding,可大大提高服务器到交换机之间的带宽但是需要在交换机上设置连接bonding网卡的两个子口映射为同一个虚拟接口。编辑 /etc/modulesconf文件,加入如下内容,以使系统在启动时加载Bonding模块。

“mode”的值表示工作模式,共有0、1、2和3四种模式,这里设定为0。Bonding工作在负载均衡(Load Balancing (round-robin))方式下,即两块网卡同时工作,这时理论上Bonding能提供两倍的带宽。Bonding运行在网卡的混杂(Promisc)模式下,而且它将两块网卡的MAC地址修改为一样的。混杂模式就是网卡不再只接收目的硬件地址是自身MAC地址的数据帧,而是可以接收网络上所有的帧。

5、减少虚拟终端机的数量。

Linux安装后系统默认是6个虚拟终端机,也就是 CTRL+ALT F1~F6 那六个,作为服务器使用可以关掉其中四个,只留下 CTRL+ALT F1~F2,大约省下 4 Mbytes 的内存,但是这样一来,X-Window 会从原来的 CTRL+ALT F7 变成 CTRL+ALT F3 。 修改 /etc/inittab 中,将 mingetty 3 ~6 全部加上 # 字号 。

6 关闭一些不用的服务

Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的。守护进程是生存期长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统关闭时终止。linux系统有很多守护进程,大多数服务器都是用守护进程实现的。如Web服务http等。同时,守护进程完成许多系统任务,比如,作业规划进程crond、打印进程lqd等。

负载压力测试是在一定约束条件下测试系统所能承受的并发用户量、运行时间、数据量,以确定系统所能承受的最大负载压力。 负载压力测试有助于确认被测系统是否能够支持性能需求,以及预期的负载增长等。负载压力测试不只是关注不同负载场景下的响应时间等指标,它也要通过测试来发现在不同负载场景下会出现的,例如速度变慢、内存泄漏等问题的原因。nbsp; 负载压力测试是性能测试的重要组成部分,负载压力测试包括并发性能测试、疲劳强度测试、大数据量测试等内容。一般包括如下: 1、性能测试 性能测试用来保证产品发布后系统的性能能够满足用户需求。其中系统性能包括执行效率、资源占用、稳定性、安全性、兼容性、可扩展性、可靠性等。 2、性能评测 性能评测包括:在真实环境下,检查系统服务等级的满足情况,评估并报告整个系统的性能;对系统的未来容量作出预测和规划。 3、性能调优 性能调优一般的步骤为首先查找形成系统瓶颈或者故障的根本原因,其次是进行性能调整和优化,最后便是评估性能调整的结果。 4、负载测试 负载测试时通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试。 5、压力测试 压力测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统能提供的最大服务级别的测试。 6、并发性测试 并发性测试的过程,是一个负载测试和压力测试的过程。即逐渐增加并发用户数负载,直到系统的瓶颈或者不能接收的性能点。并发性测试分为三类: a、应用在客户端性能的测试; b、应用在网络上性能的测试; c、应用在服务器上性能的测试; 7、疲劳强度测试 8、大数据量测试nbsp; 大数据量测试包括独立的数据量测试和综合数据量测试两类。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何正确维护服务器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情