linux系統優化

在運維工作中,我們發現Linux系統安裝之後並不能立即投入生產環境使用,往往需要先經過我們運維人員的優化才行

優化條目:

  1. 修改ip地址、網關、主機名、DNS等

  2. 關閉selinux,清空iptables

  3. 添加普通用戶並進行sudo授權管理

  4. 更新yum源及必要軟件安裝

  5. 定時自動更新服務器時間

  6. 精簡開機自啓動服務

  7. 定時自動清理/var/spool/clientmqueue/目錄垃圾文件,放置inode節點被佔滿

  8. 變更默認的ssh服務端口,禁止root用戶遠程連接

  9. 鎖定關鍵文件系統

  10. 調整文件描述符大小

  11. 調整字符集,使其支持中文

  12. 去除系統及內核版本登錄前的屏幕顯示

  13. 內核參數優化

1、修改ip地址、網關、主機名、DNS等

  1. root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

  2. DEVICE=eth0 #網卡名字

  3. BOOTPROTO=static #靜態IP地址獲取狀態 如:DHCP表示自動獲取IP地址

  4. IPADDR=192.168.1.113 #IP地址

  5. NETMASK=255.255.255.0 #子網掩碼

  6. ONBOOT=yes #引導時是否激活

  7. GATEWAY=192.168.1.1

  8. [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

  9. DEVICE=eth0

  10. BOOTPROTO=static

  11. IPADDR=192.168.1.113

  12. NETMASK=255.255.255.0

  13. ONBOOT=yes

  14. GATEWAY=192.168.1.1

  15. [root@localhost ~]# vi /etc/sysconfig/network

  16. HOSTNAME=c64 #修改主機名,重啓生效

  17. GATEWAY=192.168.1.1 #修改默認網關,如果上面eth0裏面不配置網關的話,默認就使用這裏的網關了。

  18. [root@localhost ~]# cat /etc/sysconfig/network

  19. HOSTNAME=c64

  20. GATEWAY=192.168.1.1

  21. 我們也可以用 hostname c64 來臨時修改主機名,重新登錄生效

  22. 修改DNS

  23. [root@localhost ~]# vi /etc/resolv.conf #修改DNS信息

  24. nameserver 114.114.114.114

  25. nameserver 8.8.8.8

  26. [root@localhost ~]# cat /etc/resolv.conf #查看修改後的DNS信息

  27. nameserver 114.114.114.114

  28. nameserver 8.8.8.8

  29. [root@localhost ~]# service network restart #重啓網卡,生效

  30. 重啓網卡,也可以用下面的命令

  31. [root@localhost ~]# /etc/init.d/network restartysconfig/network-scripts/ifcfg-eth0

2.關閉selinux,清空iptables


  1. 關閉selinux

  2. [root@c64 ~]# sed –i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config #修改配置文件則永久生效,但是必須要重啓系統。

  3. [root@c64 ~]# grep SELINUX=disabled /etc/selinux/config

  4. SELINUX=disabled #查看更改後的結果

  5. [root@c64 ~]# setenforce 0 #臨時生效命令

  6. [root@c64 ~]# getenforce #查看selinux當前狀態

  7. Permissive

  8. 清空iptables

  9. [root@c64 ~]# iptables –F #清理防火牆規則

  10. [root@c64 ~]# iptables –L #查看防火牆規則

  11. Chain INPUT (policy ACCEPT)

  12. target prot opt source destination

  13. Chain FORWARD (policy ACCEPT)

  14. target prot opt source destination

  15. Chain OUTPUT (policy ACCEPT)

  16. target prot opt source destination

  17. [root@c64 ~]#/etc/init.d/iptables save #保存防火牆配置信息

3.添加普通用戶並進行sudo授權管理

[root@c64 ~]# visudo

在root    ALL=(ALL)    ALL此行下,添加如下內容

sunsky    ALL=(ALL)    ALL


4、更新yum源及必要軟件安裝

yum安裝軟件,默認獲取rpm包的途徑從國外官方源,改成國內的源。

國內較快的兩個站點:搜狐鏡像站點、網易鏡像站點

接下來執行如下命令,檢測yum是否正常

    1.[root@c64 yum.repos.d]# yum clean all #清空yum緩存

  2.[root@c64 yum.repos.d]# yum makecache #建立yum緩存m repolist

然後使用如下命令將系統更新到最新

1

2

[root@c64 yum.repos.d]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*       #導入簽名KEY到RPM

[root@c64 yum.repos.d]# yum  upgrade-y     #更新系統內核到最新


接下來就要安裝幾個必要的軟件了


1

[root@c64 yum.repos.d]# yum install lrzsz ntpdate sysstat -y


lrzsz是一個上傳下載的軟件

sysstat是用來檢測系統性能及效率的工具


5、定時自動更新服務器時間

  1. [root@c64 ~]# echo '*/5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2 >&1' >>/var/spool/cron/root

  2. [root@c64 ~]# echo '*/10 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root



提示:CentOS 6.4的時間同步命令路徑不一樣

6是/usr/sbin/ntpdate

5是/sbin/ntpdate

擴展:在機器數量少時,以上定時任務同步時間就可以了。如果機器數量大時,可以在網內另外部署一臺時間同步服務器NTP Server。此處僅提及,不做部署。

6、精簡開機自啓動服務

剛裝完操作系統可以只保留crond,network,syslog,sshd這四個服務。(Centos6.4爲rsyslog)

for sun in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $sun off;done

for sun in crond rsyslog sshd network;do chkconfig --level 3$sun on;done

chkconfig --list|grep 3:on

7、定時自動清理/Var/Spool/Clientmqueue/目錄垃圾文件,放置Inode節點被佔滿

  1. [root@c64 ~]# mkdir /server/scripts -p

  2. [root@c64 ~]# vi /server/scripts/spool_clean.sh

  3. #!/bin/sh

  4. find /var/spool/clientmqueue/ -type f -mtime +30|xargs rm -f

然後將其加入到crontab定時任務中


  1. [root@c64 ~]# echo '*/30 * * * * /bin/sh /server/scripts/spool_clean.sh >/dev/null 2>&1' >>/var/spool/cron/root

8、變更默認的Ssh服務端口,禁止Root用戶遠程連接

  1. [root@c64 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

  2. [root@c64 ~]# vim /etc/ssh/sshd_config

  3. Port 52113 #ssh連接默認的端口

  4. PermitRootLogin no #root用戶***都知道,禁止它遠程登錄

  5. PermitEmptyPasswords no #禁止空密碼登錄

  6. UseDNS no #不使用DNS

  7. [root@c64 ~]# /etc/init.d/sshd reload #從新加載配置

  8. [root@c64 ~]# netstat -lnt #查看端口信息

  9. [root@c64 ~]# lsof -i tcp:52113 //lsof(list open files)是一個列出當前系統打開文件的工具


9、鎖定關鍵文件系統


  1. [root@c64 ~]# chattr +i /etc/passwd

  2. [root@c64 ~]# chattr +i /etc/inittab

  3. [root@c64 ~]# chattr +i /etc/group

  4. [root@c64 ~]# chattr +i /etc/shadow

  5. [root@c64 ~]# chattr +i /etc/gshadow

使用chattr命令後,爲了安全我們需要將其改名


  1. [root@c64 ~]# /bin/mv /usr/bin/chattr /usr/bin/任意名稱

10、調整文件描述符大小

[root@localhost ~]# [root@localhost ~]# ulimit –n #查看文件描述符大小
1024
[root@localhost ~]# echo '* - nofile 65535' >> /etc/security/limits.conf

配置完成後,重新登錄即可查看。
提示:也可以把ulimit -SHn 65535命令加入到/etc/rc.local,然後每次重啓生效

[root@c64 ~]# cat >>/etc/rc.local<

擴展:文件描述符

文件描述符在形式上是一個非負整數。實際上,它是一個索引值,指向內核爲每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時,內核向進程返回一個文件描述符。在程序設計中,一些涉及底層的程序編寫往往會圍繞着文件描述符展開。但是文件描述符這一概念往往只適用於Unix、Linux這樣的操作系統。

習慣上,標準輸入(standard input)的文件描述符是 0,標準輸出(standard output)是 1,標準錯誤(standard error)是 2。儘管這種習慣並非Unix內核的特性,但是因爲一些 shell 和很多應用程序都使用這種習慣,因此,如果內核不遵循這種習慣的話,很多應用程序將不能使用。

11、調整字符集,使其支持中文

sed -i 's#LANG="en_US.UTF-8"#LANG="zh_CN.GB18030"#' /etc/sysconfig/i18n
source /etc/sysconfig/i18n

擴展:什麼是字符集?
簡單的說就是一套文字符號及其編碼。常用的字符集有:
GBK 定長雙字節不是國際標準,支持系統不少
UTF-8 非定長 1-4字節廣泛支持,MYSQL也使用UTF-8

12、去除系統及內核版本登錄前的屏幕顯示

[root@c64 ~]# >/etc/redhat-release[root@c64 ~]# >/etc/issue

13、內核參數優化

說明:本優化適合apache,nginx,squid多種等web應用,特殊的業務也可能需要略作調整。


  1. [root@c64 ~]# vi /etc/sysctl.conf

  2. #by sun in 20131001

  3. net.ipv4.tcp_fin_timeout = 2

  4. net.ipv4.tcp_tw_reuse = 1

  5. net.ipv4.tcp_tw_recycle = 1

  6. net.ipv4.tcp_syncookies = 1

  7. net.ipv4.tcp_keepalive_time =600

  8. net.ipv4.ip_local_port_range = 4000 65000

  9. net.ipv4.tcp_max_syn_backlog = 16384

  10. net.ipv4.tcp_max_tw_buckets = 36000

  11. net.ipv4.route.gc_timeout = 100

  12. net.ipv4.tcp_syn_retries = 1

  13. net.ipv4.tcp_synack_retries = 1

  14. net.core.somaxconn = 16384

  15. net.core.netdev_max_backlog = 16384

  16. net.ipv4.tcp_max_orphans = 16384

  17. #一下參數是對iptables防火牆的優化,防火牆不開會有提示,可以忽略不理。

  18. net.ipv4.ip_conntrack_max = 25000000

  19. net.ipv4.netfilter.ip_conntrack_max = 25000000

  20. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

  21. net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120

  22. net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60

  23. net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

  24. [root@localhost ~]# sysctl –p #使配置文件生效

提示:由於CentOS6.X系統中的模塊名不是ip_conntrack,而是nf_conntrack,所以在/etc/sysctl.conf優化時,需要把net.ipv4.netfilter.ip_conntrack_max 這種老的參數,改成net.netfilter.nf_conntrack_max這樣纔可以。
即對防火牆的優化,


在5.8上是

  1. net.ipv4.ip_conntrack_max = 25000000

  2. net.ipv4.netfilter.ip_conntrack_max = 25000000

  3. net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

  4. net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120

  5. net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60

  6. net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

在6.4上是

net.nf_conntrack_max = 25000000

  1. net.netfilter.nf_conntrack_max = 25000000

  2. net.netfilter.nf_conntrack_tcp_timeout_established = 180

  3. net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120

  4. net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60

  5. net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120


另外,在此優化過程中可能會有報錯:

1、5.8版本上

  1. error: "net.ipv4.ip_conntrack_max" is an unknown key

  2. error: "net.ipv4.netfilter.ip_conntrack_max" is an unknown key

  3. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established" is an unknown key

  4. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait" is an unknown key

  5. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait" is an unknown key

  6. error: "net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait" is an unknown key

這個錯誤可能是你的防火牆沒有開啓或者自動處理可載入的模塊ip_conntrack沒有自動載入,解決辦法有二,一是開啓防火牆,二是自動處理開載入的模塊ip_conntrack

  1. modprobe ip_conntrack

  2. echo "modprobe ip_conntrack" >> /etc/rc.local

2、6.4版本上

  1. error: "net.nf_conntrack_max" is an unknown key

  2. error: "net.netfilter.nf_conntrack_max" is an unknown key

  3. error: "net.netfilter.nf_conntrack_tcp_timeout_established" is an unknown key

  4. error: "net.netfilter.nf_conntrack_tcp_timeout_time_wait" is an unknown key

  5. error: "net.netfilter.nf_conntrack_tcp_timeout_close_wait" is an unknown key

  6. error: "net.netfilter.nf_conntrack_tcp_timeout_fin_wait" is an unknown key

這個錯誤可能是你的防火牆沒有開啓或者自動處理可載入的模塊ip_conntrack沒有自動載入,解決辦法有二,一是開啓防火牆,二是自動處理開載入的模塊ip_conntrack

  1. modprobe nf_conntrack

  2. echo "modprobe nf_conntrack" >> /etc/rc.local

3、6.4版本上

  1. error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key

  2. error: "net.bridge.bridge-nf-call-iptables" is an unknown key

  3. error: "net.bridge.bridge-nf-call-arptables" is an unknown key

這個錯誤是由於自動處理可載入的模塊bridge沒有自動載入,解決辦法是自動處理開載入的模塊ip_conntrack

  1. modprobe bridge

  2. echo "modprobe bridge" >> /etc/rc.local


本文轉載來自http://www.tiejiang.org/6076.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章