CentOS系统服务优化脚本

  1. #!/bin/bash
  2. #该脚本用于关闭服务器上非必须的系统服务项,并不适用于所有服务器,比如如果是文件服务器则NFS相关服务则不能关闭
  3. #定义所要停止的服务,可以根据实际服务器应用更改
  4. SERVICES="acpid atd auditd avahi-daemon bluetooth cups firstboot hidd ip6tables kudzu lvm2-monitor mcstrans mdmonitor microcode_ctl netfs nfslock pcscd portmap rpcgssd rpcidmapd xfs yum-updatesd"
  5. for service in $SERVICES
  6. do
  7. #关闭服务随系统启动
  8. chkconfig $service off
  9. #停止选择服务
  10. service $service stop
  11. done

下载脚本:http://devops.webres.wang/wp-content/uploads/2011/10/optimize-service.sh

关闭CENTOS不必要的默认服务

CentOS关闭服务的方法:

  1. chkconfig –level 2345 服务名称 off

 

服務名稱 建議 說明
acpid 停用 Advanced Configuration and Power Interface 電源進階設定,常用在 Laptop 上
apmd 停用 Adventage Power Management daemon 偵測系統的電池電量,常用在 Laptop 上
atd 停用 /etc/at.allow,/etc/at.deny 我大概都使用 crond 來達成
autofs 停用 自動掛載檔案系統與週邊裝置 (如光碟、USB),常用在 Laptop 上
avahi-daemon 停用 當區網沒有 DNS 服務時會試著尋找提供 zeroconf 協定的主機
bluetooth 停用 Bluetooth 藍芽,常用在 Laptop 上
cpuspeed 停用 控制 CPU 速度主要用來省電,常用在 Laptop 上
cups 停用 Common UNIX Printing System 使系統支援印表機
firstboot 停用 安裝完成後第一次啟動時的服務,設定 auth、firewall、keyboard…
gpm 停用 記錄週邊裝置的檔案資料,例如文字模式下可使用滑鼠
haldaemon 停用 使系統支援 plug and play 裝置
hidd 停用 使系統支援藍芽裝置,例如滑鼠,鍵盤
hplip 停用 使系統支援 HP 相關型號印表機
ip6tables 停用 使系統支援 IPTables Filrewall IPv6
isdn 停用 使系統支援 Integrated Services Digital Network (ISDN) 環境
lm_sensors 停用 使系統支援偵測主機版或硬體,常用在 Laptop 上
messagebus 停用 使系統支援 plug and play 裝置
nfslock 停用 使系統支援 NFS Server 資料一致性功能
pcscd 停用 使系統支援 Smart Card
portmap 停用 使系統支援 NFS Service
rpcgssd 停用 使系統支援 NFSv4 Service
rpcidmapd 停用 使系統支援 NFSv4 Service
yum-updatesd 停用 使系統支援 YUM 自動更新服務 (上線機器還是先確認好再更新)
 
anacron 視個人需求 執行在 crontab 設定的時間沒有執行到的工作
auditd 視個人需求 稽核系統 /var/log/audit/audit.log,若 auditd 未執行中則稽核訊息會寫入 /var/log/messages (配合 SELinux)
iptables 視個人需求 使系統支援 IPTables Filrewall
irqbalance 視個人需求 使系統支援多個 CPU 環境當系統中斷請求時進行負載平衡的程序,所以單 CPU 的機器就不需要
lvm2-monitor 視個人需求 使系統支援 Logical Volume Manager 邏輯磁區
mcstrans 視個人需求 主要用於配合 SELinux 服務
mdmonitor 視個人需求 使系統支援 RAID 相關程序
microcode_ctl 視個人需求 使系統支援 Intel IA32 CPU 特色,所以 AMD CPU 不需要
netfs 視個人需求 Network File System Mounter 網路掛載系統 (如 NFS、Samba、NCP)
restorecond 視個人需求 使系統支援 SELinux 監控檔案狀態
smartd 視個人需求 使系統支援檢查硬碟狀態 (Hardware RAID 要改設定檔)
sendmail 視個人需求 使系統支援 Sendmail
xfs 視個人需求 使系統支援 X Window 字型
 
crond 啟動 /etc/cron.* 排程服務
kudzu 啟動 使系統每次開機會都自動執行硬體偵測
network 啟動 使系統支援網卡
readahead_early 啟動 使系統再啟動時預先將相關檔案讀到記憶體內來加快啟動速度
sshd 啟動 使系統支援 SSH Service
syslog 啟動 使系統支援 System Log Service

 

CentOS5.5 默认基本服务详解

服务名称 功能 默认 建议 备注
NetworkManager 用于自动连接网络 关闭 关闭 对服务器没用
acpid 电源的开关等检测管理 开启 关闭 对服务器没用
anacron 一种计划任务管理 开启 开启  
apmd 高级电源管理 开启 开启  
atd 在指定时间执行命令 开启 关闭 如果用crond,则可关闭它
auditd   开启 自定 如果用selinux,需要开启它
autofs 文件系统自动加载、卸载 开启 自定 只在需要时开启它,可以停止
avahi-daemon 本地网络服务查找 开启 关闭 对服务器没用
avahi-dnsconfd avahi DNS 关闭 关闭 对服务器没用
bluetooth 蓝牙无线通信 开启 关闭 对服务器没用
conman 控制台管理 关闭 关闭 没用
spuspeed 调节cpu速度 开启 自定  
crond 计划任务管理 开启 开启 很有用,开启
cups 通用unix打印服务 开启 关闭 对服务器没用
dnsmasq dns cache 关闭 关闭 没用
dund 蓝牙相关 关闭 关闭  
firstboot 系统安装后初始设定 开启 关闭  
gpm 控制台下的鼠标支持 开启 开启  
haldaemon 硬件信息收集服务 开启 开启  
hidd 蓝牙相关 开启 关闭  
ibmasm ibm硬件管理 关闭 关闭  
ip6tables ipv6防火墙 开启 关闭  
iptables ipv4防火墙 开启 关闭  
irda 红外线通信 关闭 关闭  
irqbalance cpu负载均衡 开启 自定 多核cup需要
kudzu 硬件变动检测 开启 关闭 服务器无用
lvm2-monitor lvm监视 开启 关闭 非集群无用
mcstrans 在开启selinux时用于检查context 开启 关闭  
mdmonitor 软raid监视 开启 关闭  
mdmpd 软raid管理 关闭 关闭  
messagebus 负责在各个系统进程之间传递消息 开启 开启 如停用,haldaemon启动会失败
microcode_ctl  cpu微码管理升级 开启 关闭  
multipathd   关闭 关闭  
netconsole   关闭 关闭  
netfs nfs相关 开启 关闭  
netplugd 网线热插拔监视 关闭 关闭  
network   开启 开启  
nfs 网络文件系统 关闭 关闭  
nfslock nfs相关 开启 关闭  
nscd name cache,应该与DNS相关 关闭 关闭  
oddjobd 与D-BUS相关 关闭 关闭  
pand 蓝牙相关 关闭 关闭  
pcscd pc/sc smart card daemon 开启 关闭  
portmap 使用NFS、NIS时的port map 开启 关闭  
psacct 负荷检测 关闭 关闭  
rawdevices raw 设备支持 开启 开启  
rdisc 自动检测路由器 关闭 关闭  
readahead_early   开启 开启  
readahead_later   关闭 关闭  
restorecond selinux相关 关闭 关闭  
rpcgssd NFS相关 开启 关闭  
rpcidmapd RPC name to UID/GID mapper 开启 关闭 NFS相关
rpcsvcgssd NFS相关 关闭 关闭  
saslauthd sasl认证服务相关 关闭 关闭  
sendmail   开启 关闭  
smartd 硬盘自动检测守护进程 开启 开启  
sshd   开启 开启  
syslog 系统日志进程 开启 开启  
tcsd   关闭 关闭  
wpa_supplicant 无线认证相关 关闭 关闭  
xfs x windows相关 开启 关闭  
ypbind network information service客户端 关闭 关闭  
yum-updatesd yum自动升级 开启 关闭 对服务器开启比较危险哦

注:上述服务列表是在CentOS只安装了基本系统、开发工具、开发库、老软件支持的前提下显示出来的。 

Linux安装配置varnish web加速器

Varnish是一款高性能的开源HTTP加速器,它可以来做纯粹的代理服务器,负载均衡,但varnish最主要的功能是缓存加速,也是它最出色的地方。下面介绍如何安装和使用。

  1. wget -c http://repo.varnish-cache.org/source/varnish-3.0.1.tar.gz
  2. tar xzvf varnish-3.0.1.tar.gz
  3. cd varnish-3.0.1
  4. ./configure –prefix=/usr/local/varnish
  5. make
  6. make install
  7. groupadd varnish
  8. useradd -d /var/lib/varnish -g varnish -s /sbin/nologin varnish
  9. ln -s /usr/local/varnish/sbin/varnishd /usr/sbin/varnishd

启动varnish:

  1. varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,1G -g varnish -u varnish -T 127.0.0.1:2000

关闭varnish:

  1. pkill varnish

启动参数介绍:
-f /usr/local/etc/varnish/default.vcl
这个 –f 选项指定varnishd使用哪个配置文件。
-s malloc,1G
这个 –s 选项用来确定varnish使用的存储类型和存储容量,我使用的是malloc类型(malloc是一个C函数,用于分配内存空间), 1G 定义多少内存被malloced,1G = 1gigabyte。
-T 127.0.0.1:2000
Varnish有一个基于文本的管理接口,启动它的话可以在不停止varnish的情况下来管理varnish。您可以指定管理软件监听哪个接口。当然您不能让全世界的人都能访问您的varnish管理接口,因为他们可以很轻松的通过访问varnish管理接口来获得您的root访问权限。我推荐只让它监听本机端口。如果您的系统里有您不完全信任的用户,您可以通过防火墙规则来限制他访问varnish的管理端口。
-a 0.0.0.0:8080
这一句的意思是制定varnish监听所有IP发给8080端口的http请求,如果在生产环境下,您应该让varnish监听80,这也是默认的。
vcl配置文件的介绍请执行如何命令查看:
man /usr/local/varnish/share/man/man7/vcl.7
也可以查看在线文档:https://www.varnish-cache.org/docs/3.0/

安装mod_rpaf让apache获取访客真实IP

mod_rpaf是apache的一个模块,目的是为了获取访客的真实IP,下面是安装方法:

  1. wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
  2. tar xvfz mod_rpaf-0.6.tar.gz
  3. cd mod_rpaf-0.6
  4. /usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

安装好了之后,需要对httpd.conf文件进行配置。
1、在httpd.conf加入如下代码:

  1. <IfModule mod_rpaf.c>
  2. RPAFenable On
  3. RPAFsethostname On
  4. RPAFproxy_ips 127.0.0.1
  5. RPAFheader X-Forwarded-For
  6. </IfModule>

加载模块代码:

  1. LoadModule rpaf_module   modules/mod_rpaf-2.0.so

2、并定义日志格式

  1. LogFormat "%{X-Forwarded-For}i %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" varnishcombined

3、以后可以使用如下代码启用此格式的日志:

  1. CustomLog "/home/wwwlogs/$domain.log" varnishcombined

wordpress varnish vcl配置文件

如需使用varnish作wordpress缓存,已经开发有一键包http://devops.webres.wang/lampv/
使用如下配置文件,建议安装wordpress插件Varnish HTTP Purge来自动清除缓存,此配置文件实现的功能如下:
1、varnish作为前端,使用80端口
2、允许127.0.0.1和devops.webres.wang清除缓存
3、在缓存之前,删除常见静态文件的cookie。
4、http.x-forwarded-for获取真实IP。
5、不缓存wordpress后台页面,不缓存已登录的用户和保留评论者cookie。
6、后端服务器状态检查,如发生故障,继续以旧缓存内容服务。
下面是配置文件内容:

  1. backend wp1
  2. {
  3. .host = “127.0.0.1”;
  4. .port = “8000”;
  5. .probe = {
  6.                 .url = “/”;
  7.                 .timeout = 1s;
  8.                 .interval = 60s;
  9.                 .window = 1;
  10.                 .threshold = 1;
  11.         }
  12. }
  13. acl purge {
  14. “127.0.0.1”;
  15. “devops.webres.wang”;
  16. }
  17. sub vcl_recv {
  18.           if (req.request == “PURGE”) {
  19.                 if (!client.ip ~ purge) {
  20.                         error 405 “Not allowed.”;
  21.                 }
  22.                 return (lookup);
  23.         }
  24. }
  25. # Do the PURGE thing
  26. sub vcl_hit {
  27.         if (req.request == “PURGE”) {
  28.                 purge;
  29.                 error 200 “Purged.”;
  30.         }
  31. }
  32.  
  33. sub vcl_miss {
  34.         if (req.request == “PURGE”) {
  35.                 purge;
  36.                 error 200 “Purged.”;
  37.         }
  38. }
  39. sub vcl_recv {
  40.     ## always cache these images & static assets
  41.     if (req.request == “GET” && req.url ~ “.(css|js|gif|jpg|jpeg|bmp|png|ico|img|tga|wmf|html|htm)$”) {
  42.       remove req.http.cookie;
  43.       return(lookup);
  44.     }
  45.     if (req.request == “GET” && req.url ~ “(xmlrpc.php|wlmanifest.xml)”) {
  46.       remove req.http.cookie;
  47.       return(lookup);
  48.     }
  49. ## get real ip address
  50. if (req.http.x-forwarded-for) {
  51.  set req.http.X-Forwarded-For =
  52.  req.http.X-Forwarded-For + “, “+ client.ip;
  53.  } else {
  54.  set req.http.X-Forwarded-For = client.ip;
  55.  }
  56.     ##never cache POST requests
  57.     if (req.request == “POST”)
  58.     {
  59.       set req.backend = wp1;
  60.       return(pass);
  61.     }
  62.  
  63.     ### do not cache these files:
  64.     ##never cache the admin pages, or the server-status page
  65.     if (req.request == “GET” && (req.url ~ “(wp-admin|wp-login|server-status)”))
  66.     {
  67.       return(pipe);
  68.     }
  69.  
  70.     #DO cache this ajax request
  71.     if(req.http.X-Requested-With == “XMLHttpRequest” && req.url ~ “recent_reviews”)
  72.     {
  73.       return (lookup);
  74.     }
  75.  
  76.     #dont cache ajax requests
  77.     if(req.http.X-Requested-With == “XMLHttpRequest” || req.url ~ “nocache” || req.url ~ “(control.php|wp-comments-post.php|wp-login.php|bb-login.php|bb-reset-password.php|register.php)”)
  78.     {
  79.         return (pass);
  80.     }
  81.  
  82.     if (req.http.Cookie && req.http.Cookie ~ “wordpress_”) {
  83.         set req.http.Cookie = regsuball(req.http.Cookie, “wordpress_test_cookie=”, “; wpjunk=”);
  84.     }
  85.     ### don’t cache authenticated sessions
  86.     if (req.http.Cookie && req.http.Cookie ~ “(wordpress_|PHPSESSID|comment_author_)”) {
  87.         return(pass);
  88.     }
  89.  
  90.     ### parse accept encoding rulesets to make it look nice
  91.     if (req.http.Accept-Encoding) {
  92.         if (req.http.Accept-Encoding ~ “gzip”) {
  93.         set req.http.Accept-Encoding = “gzip”;
  94.         } elsif (req.http.Accept-Encoding ~ “deflate”) {
  95.         set req.http.Accept-Encoding = “deflate”;
  96.         } else {
  97.         # unkown algorithm
  98.         remove req.http.Accept-Encoding;
  99.         }
  100.     }
  101. if (req.backend.healthy) {
  102.                 set req.grace = 120s; /* Only enable if you don’t mind slightly stale content */
  103.         } else {
  104.                 set req.grace = 24h;
  105.         }
  106.  
  107.     return(lookup);
  108. }
  109. sub vcl_fetch {
  110. set beresp.grace = 24h; /* Keep at longest used in vcl_recv */
  111. set beresp.ttl = 1h;
  112. }

No manual entry for

今天man vcl查看vcl的语法,提示No manual entry for vcl,意思是说找不到vcl的man文件,于是我们需要指定,下面提供两种方法。
第一种:编辑/etc/man.config文件,添加man的路径,如/usr/local/varnish/share/man/。
第二种:不修改man.config文件,直接man后面加上绝对路径,如:man /usr/local/varnish/share/man/man7/vcl.7

Linux网站压力测试工具webbench

在一个网站上线前, 通常我们应该做一些相关的压力测试, 以便了解当前Web服务器在高并发高负载情况下的响应状况和速度,方便对Web服务器进行优化和重构。

目前有很多免费的web压力测试工具可以帮助我们完成测试, 例如: 十个免费的Web压力测试工具http://coolshell.cn/articles/2589.html,

但在真实项目中, 我还是喜欢用Apache ab 和Webbench来完成压力测试, Apache的ab使用非常简单, 而且只要是安装了Apache了,就会自带其ab工具, 但有个问题就是不能模拟高并发状态下的测试, 好像最多可以模拟100-200次/秒的并发. 如果需要模拟更高负载的压力测试, 可能我们就需要请Webbench来帮忙了, webbench最多可以模拟3万个并发连接.但唯一的缺点就是测试的结果太简单了.

好了, 首先我们先来安装webbench吧, 为了测试准确,请将 webbench 安装在别的linux服务器上, 因为webbench 做压力测试时,自身也会消耗CPU和内存资源, 否则, 很可能把自己服务器搞挂掉:).
首先,我们先下载并安装webbench吧

  1. wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
  2. tar zxvf webbench-1.5.tar.gz
  3. cd webbench-1.5
  4. make && make install

如果出现下面错误提示:

  1. ctags *.c
  2. /bin/sh: ctags: command not found

可以使用yum安装ctags来解决这个问题

  1. yum install ctags

或者自己手动安装

  1. wget http://nchc.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz
  2. tar zxvf ctags-5.8.tar.gz
  3. ./configure
  4. make
  5. make install

如果安装了ctags, 仍然报错:

  1. install -s webbench /usr/local/bin
  2. install -m 644 webbench.1 /usr/local/man/man1
  3. install: cannot create regular file `/usr/local/man/man1′: No such file or directory
  4. make: *** [install] Error 1

我们可以通过自己创建文件夹来解决这个问题:

  1. mkdir -m 644 -p /usr/local/man/man1

最后终于安装成功! 我们也可以进行压力测试了
webbench -c 500 -t 30 http://www.example.com/phpinfo.php
 参数说明:-c表示并发数,-t表示时间(秒)

  1. -bash-3.00$ webbench -c 3000 -t 30  http://www.example.com/phpinfo.php
  2. Webbench – Simple Web Benchmark 1.5
  3. Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
  4.  
  5. Benchmarking: GET http://www.example.com/phpinfo.php
  6. 3000 clients, running 30 sec.
  7.  
  8. Speed=8358 pages/min, 8791523 bytes/sec.
  9. Requests: 4179 susceed, 0 failed.
  10. -bash-3.00$

来源:http://www.btcoolcoder.com/other/网站压力测试-webbench/

Linux 的系统服务及其配置

服务简介

Linux 系统服务是在Linux启动时自动加载,并在Linux退出时自动停止的系统任务。在Linux 启动过程中,我们可以看得很多“starting … ”提示信息,该信息表示正在启动系统服务;而在Linux 退出时,我们也能够看到相应的“Stopping … ”信息,表示系统服务正在停止。Linux自身有许多系统任务,如“network” 服务用于支持网络连接等。CAMS 在安装过程中,会自动加入三个系统任务,以保证在Linux 启动时,CAMS 服务自动启动;而在Linux 关闭时,CAMS服务也自动停止。这三个服务分别时:

oracled Oracle 数据库服务

camsd CAMS协议处理模块服务

tomcat4 Tomcat Web Server 服务,用于支持CAMS 配置管理台、自助服务平台、Portal 服务平台及内容计费认证平台等;

Linux 系统的所有服务程序脚本均可以在“/etc/rc.d/init.d” 文件夹中找到,每一项服务对应一个脚本文件。如果CAMS 已经安装,我们可以在该文件夹下找到“oracled”、“ camsd” 和“tomcat4” 这三个文件。

启动和停止服务

service 命令用于启动及停止某个服务,例如:

service camsd stop 停止 camsd 服务

service oracled start 启动 oracled 服务

service tomcat4 start 启动 tomcat4 服务

CAMS引入的三个服务间有依赖关系,即camsd 服务和tomcat4 服务依赖与oracled 服务,在oracled 服务启动前不能启动camsd 服务和tomcat4 服务;

而在oracled 服务停止前必须先停止camsd 服务和tomcat4 服务。

服务的添加、删除、自动运行及状态

CAMS 在安装过程中会自动添加相关的服务,在安装的最后过程中,会提示用户是否启动服务(使服务生效)。需要注意的是:一个服务被添加后,并不表示该服务在系统启动过程中会自动运行,仅表示可以使用service 命令来启动、停止服务。

1. 添加服务

添加服务的步骤为:

(1) 将该服务的脚本文件拷入“/etc/rc.d/init.d” 文件夹下,保证其状态为“可执行”;

(2) 使用chkconfig 命令将服务添加到服务列表中:

chkconfig –add camsd (注意有两个“ -”)

将服务添加以后, 该服务即可以使用service 来启动/停止了。

2. 删除服务

如果要删除某项服务 将上述命令的“add” 改为“del” 即可:

chkconfig –del camsd (注意有两个 “-”)

3. 设置服务自动运行

Linux 运行有7 种运行级别,分别使用0-6 来表示,控制台界面运行级别为3,图形界面运行级别为5 ,要使某服务在系统启动时自动运,行使用chkconfig将该服务添加到相应级别的自启动服务列表中即可。

chkconfig –level 35 camsd on (注意有两个 “-”)

上面的命令将 camsd 服务添加到级别为3、 5 的自启动服务列表中;而下面的命令则将服务camsd 从级别为3、 5 的自启动服务列表中删除:

chkconfig –level 35 camsd off (注意有两个 “-”)

如果需要查看某项服务的自启动状态信息, 使用如下命令即可:

chkconfig –list camsd (注意有两个 “-”)