分类 Linux 下的文章

centos开机启动服务优化笔记

默认开机启动服务列表:

服务名称 功能 默认 建议 备注说明
NetworkManager 用于自动连接网络,常用在Laptop上 开启 关闭 对服务器无用  服务器一般固定配置网络,不会自动获取ip等
abrt-ccpp   开启 自定 对服务器无用
abrt-oops   开启 自定 对服务器无用
abrtd   开启 自定 对服务器无用
acpid 电源的开关等检测管理,常用在Laptop上 开启 自定 对服务器无用
atd 在指定时间执行命令 开启 关闭 如果用crond,则可关闭它
auditd 审核守护进程 开启 开启 如果用selinux,需要开启它
autofs 文件系统自动加载和卸载 开启 自定 只在需要时开启它,可以关闭
avahi-daemon 本地网络服务查找 开启 关闭 对服务器无用
avahi-dnsconfd avahi DNS 关闭 关闭 对服务器无用
bluetooth 蓝牙无线通讯 开启 关闭 对服务器无用
dund 蓝牙相关 开启 关闭 对服务器无用
hidd 蓝牙相关 开启 关闭 对服务器无用
pand 蓝牙相关 关闭 关闭  
conman 控制台管理 关闭 关闭 无用
certmonger   关闭 关闭  
cpuspeed 调节cpu速度用来省电,常用在Laptop上 开启 关闭 对服务器无用
crond 计划任务管理 开启 开启 常用,开启
cups 通用unix打印服务 开启 关闭 对服务器无用
dnsmasq dns cache 关闭 关闭 DNS缓存服务,无用
firstboot 系统安装后初始设定 关闭 关闭  
fcoe Open-FCoE  initiator    以太网光纤通信 开启 关闭 除非服务器光纤直连,否则无用
gpm 控制台下的鼠标支持 开启 开启  
haldaemon 硬件信息收集服务 开启 开启  
ibmasm ibm硬件管理 关闭 关闭  
ip6tables ipv6防火墙 开启 关闭 用到ipv6网络的就用,一般关闭
iptables ipv4防火墙 开启 开启 ipv4防火墙服务
irda 红外线通信 关闭 关闭 无用
irqbalance cpu负载均衡 开启 自定 多核cup需要
iscsi 网络存储相关 开启 关闭  
iscsid 网络存储相关 开启 关闭  
kdump 硬件变动检测 关闭 关闭 服务器无用
kudzu 硬件变动检测 低版本的系统中 关闭 关闭 对服务器无用
livesys 安装系统相关服务 开启 关闭  
livesys-late 安装系统相关服务 开启 关闭  
lvm2-monitor lvm监视 开启 自定 如果使用LVM逻辑卷管理就开启
blk-availability lvm2相关 开启 自定 如果用lvm,则建议开启,否则不需要
mcstrans 在开启selinux时用于检查context 开启 关闭  
matahari-broker   关闭 关闭 此服务不清楚,我关闭
matahari-host   关闭 关闭 此服务不清楚,我关闭
matahari-network   关闭 关闭 此服务不清楚,我关闭
matahari-service   关闭 关闭 此服务不清楚,我关闭
matahari-sysconfig   关闭 关闭 此服务不清楚,我关闭
mdmonitor 软raid监视 开启 自定  使用软raid的服务器开启
mdmpd 软raid管理 关闭 关闭  
multipathd   关闭 关闭  
messagebus 负责在各个系统进程之间传递消息 开启 开启 如停用,haldaemon启动会失败
microcode_ctl cpu微码管理升级 开启 关闭  
netconsole   关闭 关闭  
netfs 系统启动时自动挂载网络文件系统 开启 关闭 如果使用nfs服务,就开启
network 系统启动时激活所有网络接口 开启 开启 网络基础服务,必需!
netplugd 网线热插拔监视 关闭 关闭  
nfs 网络文件系统 关闭 关闭 nfs文件服务,用到就开启
nfslock nfs相关 开启 关闭 nfs相关服务,用到就开启
nscd name cache,应该与DNS相关 关闭 关闭  
ntpd 自动对时工具 关闭 自定 网络对时服务,用到就开启
ntpdate 自动对时工具 关闭 关闭  
oddjobd 与D-BUS相关 关闭 关闭  
portreserve RPC 服务相关 开启 自定 可以关闭
pcscd pc/sc smart card daemon 开启  关闭  
portmap 使用NFS、NIS时的port map 开启 关闭  
postfix 替代sendmail的邮件服务器 开启 自定 如果无邮件服务,可关闭
psacct 负荷检测 关闭 关闭 可以关闭
qpidd 消息通信 开启 开启  
quota_nld   关闭 关闭 可以关闭
rdisc 自动检测路由器 关闭 关闭  
rawdevices raw设备支持 开启 开启  
readahead_early 提前预读相关 开启 开启  
readahead_later   关闭 关闭  
restorecond selinux相关 关闭 关闭 如果开启了selinux,就需开启
rpcbind   开启 开启 关键的基础服务,nfs服务和桌面环境都依赖此服务!相当于CentOS 5.x里面的portmap服务。
rpcgssd NFS相关 开启 关闭 NFS相关服务,可选
rpcidmapd RPC name to UID/GID mapper 开启 关闭 NFS相关服务,可选
rpcsvcgssd NFS相关 关闭 关闭 NFS相关服务,可选
rsyslog 提供系统的登录档案记录 开启 开启 系统日志关键服务,必需!
syslog 系统日志相关 开启 开启  
saslauthd sasl认证服务相关 关闭 关闭  
smartd 硬盘自动检测守护进程 关闭 关闭  
spice-vdagentd   开启 开启  
sshd ssh服务端,可提供安全的shell登录 开启 开启 SSH远程登录服务,必需!
sssd   关闭 关闭  
sendmail 邮件服务 开启 自定义  
sysstat   开启 开启 一组系统监控工具的服务,常用
tcsd   关闭 关闭  
udev-post 设备管理系统 开启 开启  
wdaemon   关闭 关闭  
wpa_supplicant 无线认证相关 关闭 关闭  
xfs x windows相关 开启 关闭  
ypbind network information service客户端 关闭 关闭  
yum-updatesd yum自动升级 开启 关闭  

表格转载于:http://www.ha97.com/4815.html

查看当前开机启动服务列表

chkconfig --list | grep '3:on' | awk '{print $1}'

我的优化项目

history | grep 'chkconfig' | awk '{print $2,$3,$4}' | grep 'off'
chkconfig bluetooth off
chkconfig auditd off
chkconfig cups off
chkconfig yum-updatesd off
chkconfig smartd off
chkconfig sendmail off
chkconfig ip6tables off
chkconfig atd off
chkconfig iscsi off
chkconfig iscsid off
chkconfig microcode_ctl off

需要因机器和环境而异,仅做记录备忘。

推荐阅读

《生产服务器环境最小化安装后 Centos 6.5优化配置》http://www.lvtao.net/server/centos-server-setup.html

linux文本处理:多文件批量查找替换

方法一:

sed -i "s/旧字符串/新字符串/g" `grep 旧字符串 -rl 目录`

(上面右边的不是单引号,是键盘上面数字1左边的按键的符号)

其中,grep aaa -rl /www 是查找出包含字符串“aaa”的文件列表。

例如:

把 /www/test.com目录下的所有文件中包含baidu的都替换成google

sed -i "s/baidu/google/g" `grep baidu -rl /www/test.com`


方法二:

perl -pi -e "s/baidu/google/g" /www/*.htm /www/*.txt

将www文件夹下所有的htm和txt文件中的“baidu”都替换为“google”

这种方式就是不用给出包含“baidu”字符串的文件列表,它会自己查找,找到了就替换。


方法三:

perl -pi -e 's|baidu|google|g' `find /www -type f`

将www文件夹下所有文件,不分扩展名,所有的“baidu”都替换为“google”

这种方式还有个特点,就是指定查找复杂的html代码,例如 <a href="#">aaa</a> ,为什么上面两种不行呢?因为上面两种在命令中出现了双引号或者斜杠,如果你要查找的字符也包含双引号或斜杠,就会使命令匹配时出现问题,无法完成任务。

perl -pi -e 's|<a href="#">aaa</a>|<a href="/">Home</a>|g' *

将当前目录下所有文件进行查找替换,将 <a href="#">aaa</a> 替换为 <a href="/">Home</a>

Apache 并发优化设置

1. 先查看apache的运行模式

查看命令:httpd -l
[Linux]

Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c

这里可以看到运行模式是prefork模式。

[Windows]

Compiled in modules:
core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c

这里可以看到运行模式是winnt模式。

2. 修改apache 的httpd-mpm.conf 配置

[Linux]
打开 /usr/local/apache2/conf/extra/httpd-mpm.conf ,每个机器可能httpd-mpm.conf 可能不同,这里可以通过find 命令查询。
第一次打开的时候默认配置是这样的。

       <IfModule mpm_prefork_module>
           StartServers          5
           MinSpareServers       5
           MaxSpareServers      10
           MaxClients          150
           MaxRequestsPerChild   0
       </IfModule>

其中:

StartServers 表示空闲子进程的最小数量。如果当前空闲子进程数小于MinSpareServers,那么Apache将以最大美妙一个的速度产生新的子进程。此参数不要设置太大。
MinSpareServers 设置空闲子进程的最大数量。如果当前有超过MaxSpareServers 数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设置太大,如果你讲质量设置比MinSpareServers小,Apache将会自动将其修改成“MinSpareServers + 1”。
MaxSpareServers 限定同一时间客户最大接入请求的数量(单个进程并发线程数)。任何超过MaxClients限制的请求讲进入等候队列,一旦一个连接被释放,队列中的请求将得到服务。要增大该值必须同事增大ServerLimit(ServerLimit待会再讲)。
MaxClients 表示每个子进程在其生存期内允许伺候的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为“0”,子进程将永远不会结束。
MaxRequestsPerChild 设置为0 ,可以防止(偶然)内存泄漏无限进行,从而耗尽内存。给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

[Windows]
在mpm_winnt模式下,Apache不使用prefork也不使用work工作模式,切记!
因此,我们只要找到原文件中:

<IfModule mpm_winnt_module>
    ThreadsPerChild      150
    MaxRequestsPerChild    0
</IfModule>

上述参数解释:

- ThreadsPerChild
是指一个进程最多拥有的线程数(Windows版本,貌似不可以开启多个进程),一般100-500就可以,根据服务器的具体性能来决定。
- MaxRequestsPerChild
是指一个线程最多可以接受的连接数,默认是0,就是不限制的意思,
0极有可能会导致内存泄露。所以,可以根据实际情况,配置一个比较大的值。Apache会在几个线程之间进行轮询,找到负载最轻的一个线程来接受新的连接。

3.现在看看需要怎么优化

[Linux]
连接数理论上是越大越好,但是得根据硬件,服务器的CPU,内存,带宽等因素,查看当前的apache连接数:
ps aux | grep httpd | wc -l
计算httpd 占用内存的平均数:
ps aux | grep -v grep |awk '/httpd/{sum += $6;n++};END{print sum/n}'
这个只是做个参考。计算后要减去服务器系统本身所需要的资源。
比如内存2G,减去500M留给服务器,还有1.5G,那么可得到最大连接数:在8000左右。
根据情况修改后的http-mpm.conf的prefork的配置后为:

      <IfModule mpm_prefork_module>
     StartServers          5
     MinSpareServers       5
     MaxSpareServers      10
     ServerLimit         5500
     MaxClients          5000
     MaxRequestsPerChild   100
      </IfModule>

这里重点介绍下ServerLimit,必须放到MaxClients前,值要大于MaxClients。
[Windows]
我根据机器情况修改后的配置为:

<IfModule mpm_winnt_module>
    ThreadsPerChild      300
    MaxRequestsPerChild    2000
</IfModule>

注意:
修改后,一定不要apacherestart,而是先 apache stop 然后再 apache start才可以。

CentOS编译安装MySQL5.5笔记

背景说明:前面已通过yum安装了mysql5.0,但是因为McAfee Audit Plugin插件只支持5.1、5.5、5.6,所以我们来试下重新编译安装mysql5.5 。

[root@CentOS ~]# rpm -qa | grep mysql
php-mysql-5.1.6-44.el5_10
mysql-5.0.95-5.el5_9
mysql-server-5.0.95-5.el5_9
mysql-5.0.95-5.el5_9
[root@CentOS ~]# yum remove mysql
......
Dependencies Resolved

==============================================================================
Package             Arch        Version                 Repository      Size
==============================================================================
Removing:
mysql               i386        5.0.95-5.el5_9          installed      8.0 M
mysql               x86_64      5.0.95-5.el5_9          installed      8.2 M
Removing for dependencies:
mysql-server        x86_64      5.0.95-5.el5_9          installed       22 M
perl-DBD-MySQL      x86_64      3.0007-2.el5            installed      328 k
php-mysql           x86_64      5.1.6-44.el5_10         installed      196 k

Transaction Summary
==============================================================================
Remove        5 Package(s)
Reinstall     0 Package(s)
Downgrade     0 Package(s)

Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing        : mysql-server                                           1/5
warning: /var/log/mysqld.log saved as /var/log/mysqld.log.rpmsave
  Erasing        : mysql                                                  2/5
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave
  Erasing        : perl-DBD-MySQL                                         3/5
  Erasing        : mysql                                                  4/5
  Erasing        : php-mysql                                              5/5

Removed:
  mysql.i386 0:5.0.95-5.el5_9          mysql.x86_64 0:5.0.95-5.el5_9        

Dependency Removed:
  mysql-server.x86_64 0:5.0.95-5.el5_9  perl-DBD-MySQL.x86_64 0:3.0007-2.el5
  php-mysql.x86_64 0:5.1.6-44.el5_10  

Complete!
[root@CentOS ~]# mkdir mysql5.5_SourceCode
[root@CentOS ~]# cd mysql5.5_SourceCode/
[root@CentOS mysql5.5_SourceCode]# wget http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.39.tar.gz
......
Length: 21713567 (21M) [application/x-tar-gz]
Saving to: `mysql-5.5.39.tar.gz'

100%[====================================>] 21,713,567  7.95K/s   in 22m 45s

2014-08-15 09:52:19 (15.5 KB/s) - `mysql-5.5.39.tar.gz' saved [21713567/21713567]

接下来准备编译安装,mysql用户和组已经都有了,如果是第一次安装mysql的话就敲下面的命令添加下。
# groupadd mysql
# useradd -r -g mysql mysql

接着创建mysql目录。
# mkdir /usr/local/mysql #mysql安装目录
# mkdir /usr/local/mysqlData #数据存放目录
# chown mysql:mysql -R /usr/local/mysqlData #更改数据目录属主为mysql
# yum install -y gcc gcc-c++ libtool autoconf automake imake libxml2-devel expat-devel ncurses-devel cmake bison #配置编译所需要的环境

开始编译。

[root@CentOS mysql5.5_SourceCode]# tar -zxvf mysql-5.5.39.tar.gz
[root@CentOS mysql5.5_SourceCode]# cd mysql-5.5.39
[root@CentOS mysql-5.5.39]# cmake . \                   #开始编译
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \               #安装到/usr/local/mysql目录
-DMYSQL_DATADIR=/usr/local/mysqlData \                  #数据存放到/usr/local/mysqlData目录
-DMYSQL_UNIX_ADDR=/usr/local/mysqlData/mysqld.sock \    #sock存放到/usr/local/mysqlData目录
-DWITH_INNOBASE_STORAGE_ENGINE=1 \                      #innoDB引擎
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_CHARSET=utf8 \                                #字符集
-DDEFALUT_CHARSETS=all \                                #支持所有字符集
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DDEFAULT_COLLATION=utf8_general_ci \                   #字符集校验
-DMYSQL_USER=mysql \
-DEXTRA_CHARSETS=all \
-DMYSQL_TCP_PORT=3306 \
-DWITH_DEBUG=0
放在一行里,方便读者复制。
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysqlData -DMYSQL_UNIX_ADR=/usr/local/mysqlData/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_CHARSETS=all -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql -DEXTRA_CHARSETS=all -DMYSQL_TCP_PORT=3306 -DWITH_DEBUG=0

编译通过后,开始安装

[root@CentOS mysql-5.5.39]# make && make install

执行初始化配置脚本,创建系统自带的数据库和表
# cd /usr/local/mysql
# scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysqlData --user=mysql

添加服务,并设置开机启动
# cp support-files/mysql.server /etc/init.d/mysql
# chkconfig mysql on
# service mysql start

如果启动失败,先检查下/usr/local/mysqlData目录属主是否已经修改为mysql,如检查无误,建议reboot下系统。

配置账户。
默认root没有密码,作为安全症患者这怎么可以忍受。设置密码之前,先配置下系统PATH
# vi /etc/profile
在文件末尾增加如下:
PATH=/usr/local/mysql/bin:$PATH
export PATH
保存退出,然后执行:source /etc/profile,让配置立即生效。

然后:mysql -u root 进入console控制台。

mysql> update mysql.user set password=PASSWORD('toor') where User='root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 4  Changed: 3  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from mysql.user where User='';
Query OK, 2 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *2624209CC5A5CE8CF46E13D472D75A76CEBF789F |
| root | centos    | *2624209CC5A5CE8CF46E13D472D75A76CEBF789F |
| root | 127.0.0.1 | *2624209CC5A5CE8CF46E13D472D75A76CEBF789F |
| root | ::1       | *2624209CC5A5CE8CF46E13D472D75A76CEBF789F |
+------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

如果需要外部访问,则配置iptables开启3306端口,方法如下:
打开/etc/sysconfig/iptables
在-A INPUT –m state --state NEW –m tcp –p –dport 22 –j ACCEPT,下添加:
-A INPUT -m state --state NEW -m tcp -p -dport 3306 -j ACCEPT
然后保存退出,在终端内执行下面的命令,刷新防火墙配置:
# service iptables restart

为外部访问的用户单独设置密码:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.1.%' IDENTIFIED BY 'hereispassword' WITH GRANT OPTION;

如果开放mysql外网访问,则最好修改默认端口3306,以防被扫描,弱口令最可怕!!

参考资料:
http://www.cnblogs.com/xiongpq/p/3384681.html