天天看點

LINUX性能調優方法總結

一、調整TCP的滑動視窗

大多數 Linux 釋出版都定義了适當的緩沖區和其他 Transmission Control Protocol(TCP)參數。可以修改這些參數來配置設定更多的記憶體,進而改進網絡性能。設定核心參數的方法是通過 proc 接口,也就是通過讀寫 /proc 中的值。幸運的是,sysctl 可以讀取 /etc/sysctl.conf 中的值并根據需要填充/proc,這樣就能夠更輕松地管理這些參數。下面展示在網際網路伺服器上應用于 Internet 伺服器的一些網絡設定。 

将這些設定添加到 /etc/sysctl.conf 的現有内容中。

第一個設定啟用 TCP SYN cookie。當從客戶機發來新的 TCP 連接配接時,資料包設定了SYN 位,伺服器就為這個半開的連接配接建立一個條目,并用一個 SYN-ACK 資料包進行響應。在正常操作中,遠端客戶機用一個 ACK 資料包進行響應,這會使半開的連接配接轉換為全開的。

有一種稱為 SYN 泛濫(SYN flood) 的網絡攻擊,它使 ACK 資料包無法傳回,導緻伺服器用光記憶體空間,無法處理到來的連接配接。SYN cookie 特性可以識别出這種情況,并使用一種優雅的方法保留隊列中的空間。大多數系統都預設啟用這個特性,但是確定配置這個特性更可靠。

啟用 TCP 視窗伸縮使客戶機能夠以更高的速度下載下傳資料。TCP 允許在未從遠端端收到确認的情況下發送多個資料包,預設設定是最多 64 KB,在與延遲比較大的遠端客戶機進行通信時這個設定可能不夠。視窗伸縮會在頭中啟用更多的位,進而增加視窗大小。

後面四個配置項增加 TCP 發送和接收緩沖區。這使應用程式可以更快地丢掉它的資料,進而為另一個請求服務。還可以強化遠端客戶機在伺服器繁忙時發送資料的能力。

最後一個配置項增加可用的本地端口數量,這樣就增加了可以同時服務的最大連接配接數量。

在下一次引導系統時,或者下一次運作 sysctl -p時,設定就會生效。

----------------------------------------------------------------------------------------

二、檔案子系統的調優

ulimit -a 用來顯示目前的各種使用者程序限制。

Linux對于每個使用者,系統限制其最大程序數。為提高性能,可以根據裝置資源情況,

設定各linux 使用者的最大程序數,下面我把某linux使用者的最大程序數設為10000個:

ulimit -u 10000

對于需要做許多 socket 連接配接并使它們處于打開狀态的 Java 應用程式而言,

最好通過使用 ulimit -n xx 修改每個程序可打開的檔案數,預設值是 1024。

ulimit -n 4096 将每個程序可以打開的檔案數目加大到4096,預設為1024

其他建議設定成無限制(unlimited)的一些重要設定是:

資料段長度:ulimit -d unlimited

最大記憶體大小:ulimit -m unlimited

堆棧大小:ulimit -s unlimited

CPU 時間:ulimit -t unlimited

虛拟記憶體:ulimit -v unlimited

暫時地,适用于通過 ulimit 指令登入 shell 會話期間。

永久地,通過将一個相應的 ulimit 語句添加到由登入 shell 讀取的檔案中, 即特定于 shell 的使用者資源檔案,如:

1)、解除 Linux 系統的最大程序數和最大檔案打開數限制:

vi /etc/security/limits.conf

# 添加如下的行

* soft noproc 11000

* hard noproc 11000

* soft nofile 4100

* hard nofile 4100

說明:* 代表針對所有使用者

noproc 是代表最大程序數

nofile 是代表最大檔案打開數

2)、讓 SSH 接受 Login 程式的登入,友善在 ssh 用戶端檢視 ulimit -a 資源限制:

a、vi /etc/ssh/sshd_config

把 UserLogin 的值改為 yes,并把 # 注釋去掉

b、重新開機 sshd 服務:

/etc/init.d/sshd restart

3)、修改所有 linux 使用者的環境變量檔案:

vi /etc/profile

ulimit -u 10000

ulimit -n 4096

ulimit -d unlimited

ulimit -m unlimited

ulimit -s unlimited

ulimit -t unlimited

ulimit -v unlimited

**************************************

有時候在程式裡面需要打開多個檔案,進行分析,系統一般預設數量是1024,(用ulimit -a可以看到)對于正常使用是夠了,但是對于程式來講,就太少了。

修改2個檔案。

1./etc/security/limits.conf

vi /etc/security/limits.conf

加上:

* soft nofile 8192

* hard nofile 20480

2./etc/pam.d/login

session required /lib/security/pam_limits.so

**********

另外確定/etc/pam.d/system-auth檔案有下面内容 session required /lib/security/$ISA/pam_limits.so 這一行確定系統會執行這個限制。

***********

3.一般使用者的.bash_profile

#ulimit -n 1024功能檢測到這些連接配接,預設情況下,在2小時之後丢掉. 2個小時的可能導緻記憶體過度使用,降低性能。是以改成1800秒(30分鐘)是個更好的選擇:sysctl -w net.ipv4.tcp_keepalive_time=1800

--------------------------------------------------------------------------------------

三、網絡安全設定:

TCP SYN Flood 攻擊

TCP SYN Flood是一種常見,而且有效的遠端(遠端)拒絕服務(Denial of Service)攻擊方式,它透過一定的操作破壞TCP三向交握建立正常連接配接,占用并耗費系統資源,使得提供TCP服務的主機系統無法正常工作。由於TCP SYN Flood是透過網路底層對伺服器Server進行攻擊的,它可以在任意改變自己的網路IP位址的同時,不被網路上的其他裝置所識别,這樣就給防範網路犯罪部門追查犯罪來源造成很大的困難。

系統檢查

一般情況下,可以一些簡單步驟進行檢查,來判斷系統是否正在遭受TCP SYN Flood攻擊。

1.服務端無法提供正常的TCP服務。連接配接請求被拒絕或逾時。

2.透過 netstat -an 指令檢查系統,發現有大量的SYN_RECV連接配接狀态。

3.iptables的設定,引用自CU

防止同步包洪水(Sync Flood)

# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

也有人寫作

#iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT --limit 1/s #限制syn并發數每秒1次,可以根據自己的需要修改

防止各種端口掃描

# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

Ping洪水攻擊(Ping of Death)

# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

----------------------------------------------------------------------------------------------------------------------------

暫定步驟:

修改/etc/profile檔案,加入:

修改/etc/rc.d/rc.local,加入:

(1G記憶體值修改成:65535 2G記憶體值修改成:131072 4G記憶體值修改成:262144)

修改/etc/sysctl.conf檔案,加入:

防火牆安全:

也有人寫作

限制syn并發數每秒1次,可以根據自己的需要修改

防止各種端口掃描

Ping洪水攻擊(Ping of Death)  

備注說明:(相對比較激進的網絡參數調整)

----------------------------------------------------------------------------------------------------------------------------

四、LINUX安全設定步驟:

1.删除所有那些不能在你系統上使用的預設使用者群組賬戶: lp,sync,shutdown,halt, news, uucp, operator, games, gopher ROOT自動從shell登出

編輯你的配置檔案”vi /etc/profile”,在某個地方加入如下行,

“HISTFILESIZE=”TMOUT=3600

我們為變量”TMOUT=”輸入的這個值使用秒表示的、代表一個小時(60*60=3600秒)。如果你将此行加入你的“/etc/profile” 檔案,那麼在一小時的非活動狀态之後将要系統裡的所有使用者自動登出。你可以在使用者私人的”。bashrc”檔案裡面設定這個變量,可以在一個确定的時間以後自動登出他們。

2.禁止并且解除安裝所有沒有用的服務

你必須禁止别切解除安裝所有你不用的的服務,那樣的話,你就能少擔心一些。看看你的”/etc/inetd.conf”檔案, 用注釋的方法禁用(在一行的開始加個#),然後給inetd程序發送一個SIGHUP指令去更新到目前的”inetd.conf”檔案。這樣做:

第一步把”/etc/inetd.conf”更改許可權限成600,那樣的話,就隻有root可以讀和寫。[Root@kapil /]# chmod 600 /etc/inetd.conf

第二步確定”/etc/inetd.conf”的所有者是root。

第三步編輯inetd.conf檔案(vi /etc/inetd.conf),并且禁止一些服務,就像:ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth等等,除非你打算用它。關閉這些服務就降低一些風險。

第四步給你的inetd程序發送一個HUP信号[root@kapil /]# killall -HUP inetd

第五步設定”/etc/inetd.conf”檔案為不可更改,使用 chattr 指令,這樣的話,沒人能修改那個檔案。*簡單的設定檔案為不可更改,執行如下指令:

[root@kapil /]# chattr +i /etc/inetd.conf

這将防止對”inetd.conf”檔案的任何更改(意外的更改或者其他更改)。隻有超級使用者root能設定或者清除這個檔案屬性。修改inetd.conf *簡單的取消不可更改的設定,執行如下指令:

[root@kapil /]# chattr -i /etc/inetd.conf

3.免疫”/etc/services”檔案

你必須免疫 “/etc/services” 檔案,防止未經授權的删除、增加服務。

免疫 “/etc/services” 檔案,使用指令:

[root@kapil /]# chattr +i /etc/services

禁止Control-Alt-Deletc鍵盤關機指令

在你的”/etc/inittab”檔案裡面注釋掉如下的行(用一個”#”)。這樣做,編輯inittab檔案(vi /etc/inittab),更換:

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

讀入:#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

現在,按照如下提示輸入,讓更改生效:

[root@kapil /]# /sbin/init q 為腳本檔案整理”/etc/rc.d/init.d”下的權限整理腳本檔案的許可權限,可靠的開始和結束所有你需要在引導時運作的常态程序,這樣做:

[root@kapil/]# chmod -R 700 /etc/rc.d/init.d/*

這意味着隻有root可以被允許讀,寫,和執行目錄裡面的腳本檔案。

4.隐藏你的系統資訊

預設狀态下,當你登入到linux機器時,他告訴你Linux分布商的名字,版本,核心版本和伺服器名字。這對一個駭客來說從你的伺服器得到這些資訊足夠了以必須立刻用一個”Login:”提示符提示使用者。

第一步

這樣做,編輯”/etc/rc.d/rc.local”檔案,放置”#”在如下行的前面。

第二步

然後,删除如下檔案:在”/etc/”目錄下的”issue.net” 和 “issue”:

[root@kapil /]# rm -f /etc/issue

[root@kapil /]# rm -f /etc/issue.net

5.禁止未用的 SUID/SGID 程式

一個正常使用者如果設定為SUID root,将能夠作為root運作程式。一個系統管理者必須最小化使用這些 SUID/GUID程式, 而且禁止那些不需要的程式。

從root擁有的程式裡發現所有有`s’ 位的程式,用此指令:

[root@kapil]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;

* 在被選中的程式上禁止suid 位,鍵入如下指令:

[root@kapil /]# chmod a-s [program]

6.關閉ipv6

vi /etc/modprobe.conf,在檔案中添加以下兩行

alias net-pf-10 off

alias ipv6 off

繼續閱讀