導航:首頁 > 操作系統 > linux伺服器性能調整

linux伺服器性能調整

發布時間:2022-11-21 04:14:54

『壹』 linux 伺服器性能出問題,排查下這些參數指標

1.1 top

1.2 vmstat

r 表示可運行進程數目,數據大致相符;而b表示的是 uninterruptible 睡眠的進程數目;swpd 表示使用到的虛擬內存數量,跟 top-Swap-used 的數值是一個含義,而如手冊所說,通常情況下 buffers 數目要比 cached Mem 小的多,buffers 一般20M這么個數量級;io 域的 bi、bo 表明每秒鍾向磁碟接收和發送的塊數目(blocks/s);system 域的 in 表明每秒鍾的系統中斷數(包括時鍾中斷),cs表明因為進程切換導致上下文切換的數目。

說到這里,想到以前很多人糾結編譯 linux kernel 的時候 -j 參數究竟是 CPU Core 還是 CPU Core+1?通過上面修改 -j 參數值編譯 boost 和 linux kernel 的同時開啟 vmstat 監控,發現兩種情況下 context switch 基本沒有變化,且也只有顯著增加 -j 值後 context switch 才會有顯著的增加,看來不必過於糾結這個參數了,雖然具體編譯時間長度我還沒有測試。資料說如果不是在系統啟動或者 benchmark 的狀態,參數 context switch>100000 程序肯定有問題。

1.3 pidstat

如果想對某個進程進行全面具體的追蹤,沒有什麼比 pidstat 更合適的了——棧空間、缺頁情況、主被動切換等信息盡收眼底。這個命令最有用的參數是-t,可以將進程中各個線程的詳細信息羅列出來。

-r: 顯示缺頁錯誤和內存使用狀況,缺頁錯誤是程序需要訪問映射在虛擬內存空間中但是還尚未被載入到物理內存中的一個分頁,缺頁錯誤兩個主要類型是

-s:棧使用狀況,包括 StkSize 為線程保留的棧空間,以及 StkRef 實際使用的棧空間。使用ulimit -s發現CentOS 6.x上面默認棧空間是10240K,而 CentOS 7.x、Ubuntu系列默認棧空間大小為8196K

1.4 其他

while :; do ps -eo user,pid,ni,pri,pcpu,psr,comm | grep 'ailawd' sleep 1; done

2.1 iostat

3.1 netstat

➜ ~ netstat -antp #列出所有TCP的連接

➜ ~ netstat -nltp #列出本地所有TCP偵聽套接字,不要加-a參數

3.2 sar

3.3 tcpmp

『貳』 linux 內核參數優化

一、Sysctl命令用來配置與顯示在/proc/sys目錄中的內核參數.如果想使參數長期保存,可以通過編輯/etc/sysctl.conf文件來實現。

命令格式:
sysctl [-n] [-e] -w variable=value
sysctl [-n] [-e] -p (default /etc/sysctl.conf)
sysctl [-n] [-e] –a

常用參數的意義:
-w 臨時改變某個指定參數的值,如
# sysctl -w net.ipv4.ip_forward=1
-a 顯示所有的系統參數
-p從指定的文件載入系統參數,默認從/etc/sysctl.conf 文件中載入,如:

以上兩種方法都可能立即開啟路由功能,但如果系統重啟,或執行了
# service network restart
命令,所設置的值即會丟失,如果想永久保留配置,可以修改/etc/sysctl.conf文件,將 net.ipv4.ip_forward=0改為net.ipv4.ip_forward=1

二、linux內核參數調整:linux 內核參數調整有兩種方式

方法一:修改/proc下內核參數文件內容,不能使用編輯器來修改內核參數文件,理由是由於內核隨時可能更改這些文件中的任意一個,另外,這些內核參數文件都是虛擬文件,實際中不存在,因此不能使用編輯器進行編輯,而是使用echo命令,然後從命令行將輸出重定向至 /proc 下所選定的文件中。如:將 timeout_timewait 參數設置為30秒:

參數修改後立即生效,但是重啟系統後,該參數又恢復成默認值。因此,想永久更改內核參數,需要修改/etc/sysctl.conf文件

方法二.修改/etc/sysctl.conf文件。檢查sysctl.conf文件,如果已經包含需要修改的參數,則修改該參數的值,如果沒有需要修改的參數,在sysctl.conf文件中添加參數。如:
net.ipv4.tcp_fin_timeout=30
保存退出後,可以重啟機器使參數生效,如果想使參數馬上生效,也可以執行如下命令:

三、sysctl.conf 文件中參數設置及說明
proc/sys/net/core/wmem_max
最大socket寫buffer,可參考的優化值:873200

/proc/sys/net/core/rmem_max
最大socket讀buffer,可參考的優化值:873200
/proc/sys/net/ipv4/tcp_wmem
TCP寫buffer,可參考的優化值: 8192 436600 873200

/proc/sys/net/ipv4/tcp_rmem
TCP讀buffer,可參考的優化值: 32768 436600 873200

/proc/sys/net/ipv4/tcp_mem
同樣有3個值,意思是:
net.ipv4.tcp_mem[0]:低於此值,TCP沒有內存壓力.
net.ipv4.tcp_mem[1]:在此值下,進入內存壓力階段.
net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket.
上述內存單位是頁,而不是位元組.可參考的優化值是:786432 1048576 1572864

/proc/sys/net/core/netdev_max_backlog
進入包的最大設備隊列.默認是300,對重負載伺服器而言,該值太低,可調整到1000

/proc/sys/net/core/somaxconn
listen()的默認參數,掛起請求的最大數量.默認是128.對繁忙的伺服器,增加該值有助於網路性能.可調整到256.

/proc/sys/net/core/optmem_max
socket buffer的最大初始化值,默認10K

/proc/sys/net/ipv4/tcp_max_syn_backlog
進入SYN包的最大請求隊列.默認1024.對重負載伺服器,可調整到2048

/proc/sys/net/ipv4/tcp_retries2
TCP失敗重傳次數,默認值15,意味著重傳15次才徹底放棄.可減少到5,盡早釋放內核資源.

/proc/sys/net/ipv4/tcp_keepalive_time
/proc/sys/net/ipv4/tcp_keepalive_intvl
/proc/sys/net/ipv4/tcp_keepalive_probes
這3個參數與TCP KeepAlive有關.默認值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某個TCP連接在idle 2個小時後,內核才發起probe.如果probe 9次(每次75秒)不成功,內核才徹底放棄,認為該連接已失效.對伺服器而言,顯然上述值太大. 可調整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3

/proc/sys/net/ipv4/ip_local_port_range
指定埠范圍的一個配置,默認是32768 61000,已夠大.
net.ipv4.tcp_syncookies = 1
表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,默認為0,表示關閉;

net.ipv4.tcp_tw_reuse = 1
表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;

net.ipv4.tcp_tw_recycle = 1
表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。

net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。

net.ipv4.tcp_keepalive_time = 1200
表示當keepalive起用的時候,TCP發送keepalive消息的頻度。預設是2小時,改為20分鍾。

net.ipv4.ip_local_port_range = 1024 65000
表示用於向外連接的埠范圍。預設情況下很小:32768到61000,改為1024到65000。

net.ipv4.tcp_max_syn_backlog = 8192
表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網路連接數。

net.ipv4.tcp_max_tw_buckets = 5000
表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並列印警告信息。默認為 180000,改為 5000。對於Apache、Nginx等伺服器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對於Squid,效果卻不大。此項參數可以控制TIME_WAIT套接字的最大數量,避免Squid伺服器被大量的TIME_WAIT套接字拖死。

Linux上的NAT與iptables
談起Linux上的NAT,大多數人會跟你提到iptables。原因是因為iptables是目前在linux上實現NAT的一個非常好的介面。它通過和內核級直接操作網路包,效率和穩定性都非常高。這里簡單列舉一些NAT相關的iptables實例命令,可能對於大多數實現有多幫助。
這里說明一下,為了節省篇幅,這里把准備工作的命令略去了,僅僅列出核心步驟命令,所以如果你單單執行這些沒有實現功能的話,很可能由於准備工作沒有做好。如果你對整個命令細節感興趣的話,可以直接訪問我的《如何讓你的Linux網關更強大》系列文章,其中對於各個腳本有詳細的說明和描述。

EXTERNAL="eth0"
INTERNAL="eth1"

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $EXTERNAL -j MASQUERADE

LOCAL_EX_IP=11.22.33.44 #設定網關的外網卡ip,對於多ip情況,參考《如何讓你的Linux網關更強大》系列文章
LOCAL_IN_IP=192.168.1.1 #設定網關的內網卡ip
INTERNAL="eth1" #設定內網卡

echo 1 > /proc/sys/net/ipv4/ip_forward

modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

iptables -t nat -A PREROUTING -d $LOCAL_EX_IP -p tcp --dport 80 -j DNAT --to 192.168.1.10

iptables -t nat -A POSTROUTING -d 192.168.1.10 -p tcp --dport 80 -j SNAT --to $LOCAL_IN_IP

iptables -A FORWARD -o $INTERNAL -d 192.168.1.10 -p tcp --dport 80 -j ACCEPT

iptables -t nat -A OUTPUT -d $LOCAL_EX_IP -p tcp --dport 80 -j DNAT --to 192.168.1.10
獲取系統中的NAT信息和診斷錯誤
了解/proc目錄的意義
在Linux系統中,/proc是一個特殊的目錄,proc文件系統是一個偽文件系統,它只存在內存當中,而不佔用外存空間。它包含當前系統的一些參數(variables)和狀態(status)情況。它以文件系統的方式為訪問系統內核數據的操作提供介面
通過/proc可以了解到系統當前的一些重要信息,包括磁碟使用情況,內存使用狀況,硬體信息,網路使用情況等等,很多系統監控工具(如HotSaNIC)都通過/proc目錄獲取系統數據。
另一方面通過直接操作/proc中的參數可以實現系統內核參數的調節,比如是否允許ip轉發,syn-cookie是否打開,tcp超時時間等。
獲得參數的方式:
第一種:cat /proc/xxx/xxx,如 cat /proc/sys/net/ipv4/conf/all/rp_filter
第二種:sysctl xxx.xxx.xxx,如 sysctl net.ipv4.conf.all.rp_filter
改變參數的方式:
第一種:echo value > /proc/xxx/xxx,如 echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
第二種:sysctl [-w] variable=value,如 sysctl [-w] net.ipv4.conf.all.rp_filter=1
以上設定系統參數的方式只對當前系統有效,重起系統就沒了,想要保存下來,需要寫入/etc/sysctl.conf文件中
通過執行 man 5 proc可以獲得一些關於proc目錄的介紹
查看系統中的NAT情況
和NAT相關的系統變數
/proc/slabinfo:內核緩存使用情況統計信息(Kernel slab allocator statistics)
/proc/sys/net/ipv4/ip_conntrack_max:系統支持的最大ipv4連接數,默認65536(事實上這也是理論最大值)
/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 已建立的tcp連接的超時時間,默認432000,也就是5天
和NAT相關的狀態值
/proc/net/ip_conntrack:當前的前被跟蹤的連接狀況,nat翻譯表就在這里體現(對於一個網關為主要功能的Linux主機,裡面大部分信息是NAT翻譯表)
/proc/sys/net/ipv4/ip_local_port_range:本地開放埠范圍,這個范圍同樣會間接限制NAT表規模

cat /proc/sys/net/ipv4/ip_conntrack_max

cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

cat /proc/net/ip_conntrack

cat /proc/sys/net/ipv4/ip_local_port_range

wc -l /proc/net/ip_conntrack

grep ip_conntrack /proc/slabinfo | grep -v expect | awk '{print 2;}'

grep ip_conntrack /proc/slabinfo | grep -v expect | awk '{print 3;}'

cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10

cat /proc/net/ip_conntrack | perl -pe s/^(.*?)src/src/g | cut -d ' ' -f1 | cut -d '=' -f2 | sort | uniq -c | sort -nr | head -n 10

『叄』 升級php7.3 linux伺服器cpu 突然很高

1、通過寶塔面板安裝的建站環境是LNMP,使用的Nginx 1.16.1、MySQL 5.5.62、PHP-7.0。2、優化PHP7.0設置。先進入到PHP7.0管理頁面。首先先安裝一個opcache緩沖器,用於加速PHP腳本,其他的就都按默認的來吧,畢竟安裝的擴展太多容易影響性能。修改max_execution_time時間為20.性能調整。這里可以根據自己伺服器配置進行設置,寶塔面板比較人性化,會根據你的伺服器配置設置推薦方案。可以根據自己伺服器內存大小進行計算,一般一個php-fpm進程佔用內存30M左右,以1024MB內存1G內存)來計算,大概可以設置34個並發。使用的就是1核1G內存配置的伺服器,安裝寶塔面板後推薦的是40並發,用不到那麼高的並發,所以設置了20並發的方案,並把max_spare_servers數字調整成了14。

『肆』 如何提高Linux伺服器磁碟io性能

您好,很高興為您解答。

在現有文件系統下進行優化:
linux內核和各個文件系統採用了幾個優化方案來提升磁碟訪問速度。但這些優化方案需要在我們的伺服器設計中進行配合才能得到充分發揮。
文件系統緩存
linux內核會將大部分空閑內存交給虛擬文件系統,來作為文件緩存,叫做page cache。在內存不足時,這部分內存會採用lru演算法進行淘汰。通過free命令查看內存,顯示為cached的部分就是文件緩存了。

如何針對性優化:
lru並不是一個優秀淘汰演算法,lru最大的優勢是普適性好,在各種使用場景下都能起到一定的效果。如果能找到當前使用場景下,文件被訪問的統計特徵,針 對性的寫一個淘汰演算法,可以大幅提升文件緩存的命中率。對於http正向代理來說,一個好的淘汰演算法可以用1GB內存達到lru演算法100GB內存的緩存 效果。如果不打算寫一個新的淘汰演算法,一般不需要在應用層再搭一個文件cache程序來做緩存。

最小分配:
當文件擴大,需要分配磁碟空間時,大部分文件系統不會僅僅只分配當前需要的磁碟空間,而是會多分配一些磁碟空間。這樣下次文件擴大時就可以使用已經分配好的空間,而不會頻繁的去分配新空間。
例如ext3下,每次分配磁碟空間時,最小是分配8KB。
最小分配的副作用是會浪費一些磁碟空間(分配了但是又沒有使用)

如何針對性優化:
我們在reiserfs下將最小分配空間從8KB改大到128K後提升了30%的磁碟io性能。如果當前使用場景下小文件很多,把預分配改大就會浪費很多 磁碟空間,所以這個數值要根據當前使用場景來設定。似乎要直接改源代碼才能生效,不太記得了,09年的時候改的,有興趣的同學自己google吧。

io訪問調度:
在同時有多個io訪問時,linux內核可以對這些io訪問按LBA進行合並和排序,這樣磁頭在移動時,可以「順便」讀出移動過程中的數據。
SATA等磁碟甚至在磁碟中內置了io排序來進一步提升性能,一般需要在主板中進行配置才能啟動磁碟內置io排序。linux的io排序是根據LBA進行的,但LBA是一個一維線性地址,無法完全反應出二維的圓形磁碟,所以磁碟的內置io排序能達到更好的效果。

如何針對性優化:
io訪問調度能大幅提升io性能,前提是應用層同時發起了足夠的io訪問供linux去調度。
怎樣才能從應用層同時向內核發起多個io訪問呢?
方案一是用aio_read非同步發起多個文件讀寫請求。
方案二是使用磁碟線程池同時發起多個文件讀寫請求。
對我們的http正向代理來說,採用16個線程讀寫磁碟可以將性能提升到2.5倍左右。具體開多少個線程/進程,可以根據具體使用場景來決定。

小提示:
將文件句柄設置為非阻塞時,進程還是會睡眠等待磁碟io,非阻塞對於文件讀寫是不生效的。在正常情況下,讀文件只會引入十幾毫秒睡眠,所以不太明顯;而在磁碟io極大時,讀文件會引起十秒以上的進程睡眠。

預讀取:
linux內核可以預測我們「將來的讀請求」並提前將數據讀取出來。通過預讀取可以減少讀io的次數,並且減小讀請求的延時。

如何針對性優化:
預讀取的預測准確率是有限的,與其依賴預讀取,不如我們直接開一個較大的緩沖區,一次性將文件讀出來再慢慢處理;盡量不要開一個較小的緩沖區,循環讀文件/處理文件。
雖然說「預讀取」和「延遲分配」能起到類似的作用,但是我們自己擴大讀寫緩沖區效果要更好。

延遲分配:
當文件擴大,需要分配磁碟空間時,可以不立即進行分配,而是暫存在內存中,將多次分配磁碟空間的請求聚合在一起後,再進行一次性分配。
延遲分配的目的也是減少分配次數,從而減少文件不連續。

延遲分配的副作用有幾個:
1、如果應用程序每次寫數據後都通過fsync等介面進行強制刷新,延遲分配將不起作用
2、延遲分配有可能間歇性引入一個較大的磁碟IO延時(因為要一次性向磁碟寫入較多數據)
只有少數新文件系統支持這個特性

如何針對性優化:
如果不是對安全性(是否允許丟失)要求極高的數據,可以直接在應用程序里緩存起來,積累到一定大小再寫入,效果比文件系統的延遲分配更好。如果對安全性要求極高,建議經常用fsync強制刷新。

在線磁碟碎片整理:
Ext4提供了一款碎片整理工具,叫e4defrag,主要包含三個功能:
1、讓每個文件連續存儲
2、盡量讓每個目錄下的文件連續存儲
3、通過整理空閑磁碟空間,讓接下來的分配更不容易產生碎片

如何針對性優化:
「讓每個目錄下的文件連續存儲」是一個極有價值的功能。
傳統的做法是通過拼接圖片來將這10張圖片合並到一張大圖中,再由前端將大圖切成10張小圖。
有了e4defrag後,可以將需連續訪問的文件放在同一個文件夾下,再定期使用e4defrag進行磁碟整理。

實現自己的文件系統:
在大部分伺服器上,不需要支持「修改文件」這個功能。一旦文件創建好,就不能再做修改操作,只支持讀取和刪除。在這個前提下,我們可以消滅所有文件碎片,把磁碟io效率提升到理論極限。

有一個公式可以衡量磁碟io的效率:
磁碟利用率 = 傳輸時間/(平均尋道時間+傳輸時間)

如若滿意,請點擊回答右側【採納答案】,如若還有問題,請點擊【追問】

~ O(∩_∩)O~

『伍』 如何測試Linux伺服器的性能

################### cpu性能查看 ############################################################
1、查看物理cpu個數:
cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l

2、查看每個物理cpu中的core個數:
cat /proc/cpuinfo |grep "cpu cores"|wc -l

3、邏輯cpu的個數:
cat /proc/cpuinfo |grep "processor"|wc -l

物理cpu個數*核數=邏輯cpu個數(不支持超線程技術的情況下)

########################### 內存查看 ################################################################
1、查看內存使用情況:
free -m
total used free shared buffers cached
Mem: 3949 2519 1430 0 189 1619
-/+ buffers/cache: 710 3239
Swap: 3576 0 3576

total:內存總數
used:已經使用的內存數
free:空閑內存數
shared:多個進程共享的內存總額
- buffers/cache:(已用)的內存數,即used-buffers-cached
+ buffers/cache:(可用)的內存數,即free+buffers+cached

Buffer Cache用於針對磁碟塊的讀寫;Page Cache用於針對文件inode的讀寫,這些Cache能有效地縮短I/O系統調用的時間。

對於操作系統來說free/used是系統可用/佔用的內存;而對於應用程序來說-/+ buffers/cache是可用/佔用內存,因為buffers/cache很快就會被使用。我們工作時候應該從應用角度來看。

################# 硬碟查看 ##########################################################################
1、查看硬碟及分區信息:
fdisk -l

2、查看文件系統的磁碟空間佔用情況:
df -h

3、查看硬碟的I/O性能(每隔一秒顯示一次,顯示5次):
iostat -x 1 5
iostat是含在套裝systat中的,可以用yum -y install systat來安裝。
常關注的參數:
如果%util接近100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁碟可能存在瓶頸。
如果idle小於70%,I/O的壓力就比較大了,說明讀取進程中有較多的wait。

4、查看linux系統中某目錄的大小:
-sh /root

如發現某個分區空間接近用完,可以進入該分區的掛載點,用以下命令找出佔用空間最多的文件或目錄,然後按照從大到小的順序,找出系統中佔用最多空間的前10個文件或目錄:
-cksh *|sort -rn|head -n 10

############################################ 查看平均負載 ####################################
有時候系統響應很慢,但又找不到原因,這時就要查看平均負載了,看它是否有大量的進程在排隊等待。
最簡單的命令:
uptime
查看過去的1分鍾、5分鍾和15分鍾內進程隊列中的平均進程數量。
還有動態命令:
top
我們只關心以下部分:
top - 21:33:09 up 1:00, 1 user, load average: 0.00, 0.01, 0.05
如果每個邏輯cpu當前的活動進程不大於3,則系統性能良好;
如果每個邏輯cpu當前的活動進程不大於4,表示可以接受;
如果每個邏輯cpu當前的活動進程大於5,則系統性能問題嚴重。
一般計算方法:負載值/邏輯cpu個數

還可以結合vmstat命令來判斷系統是否繁忙,其中:
procs
r:等待運行的進程數。
b:處在非中斷睡眠狀態的進程數。
w:被交換出去的可運行的進程數。
memeory
swpd:虛擬內存使用情況,單位為KB。
free:空閑的內存,單位為KB。
buff:被用來作為緩存的內存數,單位為KB。
swap
si:從磁碟交換到內存的交換頁數量,單位為KB。
so:從內存交換到磁碟的交換頁數量,單位為KB。
io
bi:發送到塊設備的塊數,單位為KB。
bo:從塊設備接受的塊數,單位為KB。
system
in:每秒的中斷數,包括時鍾中斷。
cs:每秒的環境切換次數。
cpu
按cpu的總使用百分比來顯示。
us:cpu使用時間。
sy:cpu系統使用時間。
id:閑置時間。
標准情況下r和b的值應該為:
r<5,b=0
假設輸出的信息中:
如果r經常大於3或4,且id經常少於50,表示cpu的負荷過重。
pi、po長期不等於0,表示內存不足。
bi經常不等於0,且在b中的隊列大於2或3,表示io的性能不好。

################################# 其他參數 #####################################
查看內核版本號:
uname -a
簡化命令:
uname -r
查看系統是32位還是64位的:
file /sbin/init
查看發行版:
cat /etc/issue
或lsb_release -a
查看系統已載入的相關模塊:
lsmod
查看pci設置:
lspci

『陸』 linux系統怎樣查看伺服器性能命令

通過執行以下命令,可以在1分鍾內對系統資源使用情況有個大致的了解。
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
其中一些命令需要安裝sysstat包,有一些由procps包提供。這些命令的輸出,有助於快速定位性能瓶頸,檢查出所有資源(CPU、內存、磁碟IO等)的利用率(utilization)、飽和度(saturation)和錯誤(error)度量,也就是所謂的USE方法。
下面我們來逐一介紹下這些命令,有關這些命令更多的參數和說明,請參照命令的手冊。
uptime
$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02

這個命令可以快速查看機器的負載情況。在Linux系統中,這些數據表示等待CPU資源的進程和阻塞在不可中斷IO進程(進程狀態為D)的數量。這些數據可以讓我們對系統資源使用有一個宏觀的了解。
命令的輸出分別表示1分鍾、5分鍾、15分鍾的平均負載情況。通過這三個數據,可以了解伺服器負載是在趨於緊張還是區域緩解。如果1分鍾平均負載很高,而15分鍾平均負載很低,說明伺服器正在命令高負載情況,需要進一步排查CPU資源都消耗在了哪裡。反之,如果15分鍾平均負載很高,1分鍾平均負載較低,則有可能是CPU資源緊張時刻已經過去。
上面例子中的輸出,可以看見最近1分鍾的平均負載非常高,且遠高於最近15分鍾負載,因此我們需要繼續排查當前系統中有什麼進程消耗了大量的資源。可以通過下文將會介紹的vmstat、mpstat等命令進一步排查。
dmesg | tail
$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.

該命令會輸出系統日誌的最後10行。示例中的輸出,可以看見一次內核的oom kill和一次TCP丟包。這些日誌可以幫助排查性能問題。千萬不要忘了這一步。
vmstat 1
$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
^C

vmstat(8) 命令,每行會輸出一些系統核心指標,這些指標可以讓我們更詳細的了解系統狀態。後面跟的參數1,表示每秒輸出一次統計信息,表頭提示了每一列的含義,這幾介紹一些和性能調優相關的列:
r:等待在CPU資源的進程數。這個數據比平均負載更加能夠體現CPU負載情況,數據中不包含等待IO的進程。如果這個數值大於機器CPU核數,那麼機器的CPU資源已經飽和。
free:系統可用內存數(以千位元組為單位),如果剩餘內存不足,也會導致系統性能問題。下文介紹到的free命令,可以更詳細的了解系統內存的使用情況。
si, so:交換區寫入和讀取的數量。如果這個數據不為0,說明系統已經在使用交換區(swap),機器物理內存已經不足。
us, sy, id, wa, st:這些都代表了CPU時間的消耗,它們分別表示用戶時間(user)、系統(內核)時間(sys)、空閑時間(idle)、IO等待時間(wait)和被偷走的時間(stolen,一般被其他虛擬機消耗)。
上述這些CPU時間,可以讓我們很快了解CPU是否出於繁忙狀態。一般情況下,如果用戶時間和系統時間相加非常大,CPU出於忙於執行指令。如果IO等待時間很長,那麼系統的瓶頸可能在磁碟IO。
示例命令的輸出可以看見,大量CPU時間消耗在用戶態,也就是用戶應用程序消耗了CPU時間。這不一定是性能問題,需要結合r隊列,一起分析。
mpstat -P ALL 1
$ mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:38:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.78
07:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.99
07:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00
07:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00
07:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03
[...]

該命令可以顯示每個CPU的佔用情況,如果有一個CPU佔用率特別高,那麼有可能是一個單線程應用程序引起的。
pidstat 1
$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID %usr %system %guest %CPU CPU Command
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat
^C

pidstat命令輸出進程的CPU佔用率,該命令會持續輸出,並且不會覆蓋之前的數據,可以方便觀察系統動態。如上的輸出,可以看見兩個JAVA進程佔用了將近1600%的CPU時間,既消耗了大約16個CPU核心的運算資源。
iostat -xz 1
$ iostat -xz 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
73.96 0.00 3.73 0.03 0.06 22.21
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09
xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25
xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26
dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04
dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00
dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03
[...]
^C

iostat命令主要用於查看機器磁碟IO情況。該命令輸出的列,主要含義是:
r/s, w/s, rkB/s, wkB/s:分別表示每秒讀寫次數和每秒讀寫數據量(千位元組)。讀寫量過大,可能會引起性能問題。
await:IO操作的平均等待時間,單位是毫秒。這是應用程序在和磁碟交互時,需要消耗的時間,包括IO等待和實際操作的耗時。如果這個數值過大,可能是硬體設備遇到了瓶頸或者出現故障。
avgqu-sz:向設備發出的請求平均數量。如果這個數值大於1,可能是硬體設備已經飽和(部分前端硬體設備支持並行寫入)。
%util:設備利用率。這個數值表示設備的繁忙程度,經驗值是如果超過60,可能會影響IO性能(可以參照IO操作平均等待時間)。如果到達100%,說明硬體設備已經飽和。
如果顯示的是邏輯設備的數據,那麼設備利用率不代表後端實際的硬體設備已經飽和。值得注意的是,即使IO性能不理想,也不一定意味這應用程序性能會不好,可以利用諸如預讀取、寫緩存等策略提升應用性能。
free –m
$ free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/+ buffers/cache: 23944 222053
Swap: 0 0 0

free命令可以查看系統內存的使用情況,-m參數表示按照兆位元組展示。最後兩列分別表示用於IO緩存的內存數,和用於文件系統頁緩存的內存數。需要注意的是,第二行-/+ buffers/cache,看上去緩存佔用了大量內存空間。這是Linux系統的內存使用策略,盡可能的利用內存,如果應用程序需要內存,這部分內存會立即被回收並分配給應用程序。因此,這部分內存一般也被當成是可用內存。
如果可用內存非常少,系統可能會動用交換區(如果配置了的話),這樣會增加IO開銷(可以在iostat命令中提現),降低系統性能。
sar -n DEV 1
$ sar -n DEV 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:16:48 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:49 AM eth0 18763.00 5032.00 20686.42 478.30 0.00 0.00 0.00 0.00
12:16:49 AM lo 14.00 14.00 1.36 1.36 0.00 0.00 0.00 0.00
12:16:49 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:16:49 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:50 AM eth0 19763.00 5101.00 21999.10 482.56 0.00 0.00 0.00 0.00
12:16:50 AM lo 20.00 20.00 3.25 3.25 0.00 0.00 0.00 0.00
12:16:50 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
^C

sar命令在這里可以查看網路設備的吞吐率。在排查性能問題時,可以通過網路設備的吞吐量,判斷網路設備是否已經飽和。如示例輸出中,eth0網卡設備,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,沒有達到1Gbit/sec的硬體上限。
sar -n TCP,ETCP 1
$ sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:17:19 AM active/s passive/s iseg/s oseg/s
12:17:20 AM 1.00 0.00 10233.00 18846.00
12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:20 AM 0.00 0.00 0.00 0.00 0.00
12:17:20 AM active/s passive/s iseg/s oseg/s
12:17:21 AM 1.00 0.00 8359.00 6039.00
12:17:20 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:21 AM 0.00 0.00 0.00 0.00 0.00
^C

sar命令在這里用於查看TCP連接狀態,其中包括:
active/s:每秒本地發起的TCP連接數,既通過connect調用創建的TCP連接;
passive/s:每秒遠程發起的TCP連接數,即通過accept調用創建的TCP連接;
retrans/s:每秒TCP重傳數量;
TCP連接數可以用來判斷性能問題是否由於建立了過多的連接,進一步可以判斷是主動發起的連接,還是被動接受的連接。TCP重傳可能是因為網路環境惡劣,或者伺服器壓力過大導致丟包。
top
$ top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave
66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched

top命令包含了前面好幾個命令的檢查的內容。比如系統負載情況(uptime)、系統內存使用情況(free)、系統CPU使用情況(vmstat)等。因此通過這個命令,可以相對全面的查看系統負載的來源。同時,top命令支持排序,可以按照不同的列排序,方便查找出諸如內存佔用最多的進程、CPU佔用率最高的進程等。
但是,top命令相對於前面一些命令,輸出是一個瞬間值,如果不持續盯著,可能會錯過一些線索。這時可能需要暫停top命令刷新,來記錄和比對數據。
總結
排查Linux伺服器性能問題還有很多工具,上面介紹的一些命令,可以幫助我們快速的定位問題。例如前面的示例輸出,多個證據證明有JAVA進程佔用了大量CPU資源,之後的性能調優就可以針對應用程序進行。

『柒』 linux apache 性能調優 8G 8核 的伺服器

[檢測工具]

為了得到完整的調試結果,建議你採用 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 系統,建議升級內核到 2.4,因為靜態頁面由內核服務。

6、另外一項緩沖技術是把不常修改的 PHP 頁面採用 HTML 緩沖輸出。

7、不要在 Web 伺服器上運行 X-Windows ,關掉沒有必要運行的進程。

8、如果能夠用文本就不要用圖像,盡量減小圖片的尺寸。

9、分散負載,把資料庫伺服器放到另外的機器上去。採用另外低端的機器服務圖片和 HTML 頁面,如果所有的靜態頁面在另外一台伺服器上處理,可以設置 httpd.conf 中的 KeepAlives 為 off ,來減少斷開連接的時間。

10、以上所有的方法都是針對單機而言的,如果你覺得系統還是不夠快,可以採用集群,負載均衡,緩沖技術。採用 Squid 作為緩沖,配置 Squid 的方法。

[編譯優化]

11、把基於文件的會話切換到基於共享內存的會話。編譯 PHP 時採用 --with-mm 選項,在 php.ini 中設置 set session.save_handler=mm 。這個簡單的修改能讓會話管理時間縮短一半。

12、採用最新版本的 Apache ,並把 PHP 編譯其中,或者採用 DSO 模式,不要採用 CGI 方式。

13、編譯 PHP 時,建議採用如下的參數:
--enable-inline-optimization --disable-debug

[配置優化]

14、修改 httpd.conf :
# 關閉 DNS lookups,PHP 腳本只拿 IP 地址
HostnameLookups off

15、如果網路擁擠,CPU 資源不夠用,採用 PHP 的 HTML 壓縮功能:
output_handler = ob_gzhandler
PHP 4.0.4 的用戶請不要使用,因為存在內存泄漏問題。

16、修改 httpd.conf 中的 SendBufferSize 為你最大的頁面文件的大小。加大內核的 TCP/IP 寫緩沖大小。

17、採用資料庫的持久連接時,不要把 MaxRequestsPerChild 設置得太大。

[第三方軟體優化]

18、如果喜歡從修改 Apache 源碼入手,可以安裝 lingerd。在頁面產生和發送後,每個 Apache 進程都會浪費一段時光在客戶連接上,Lingerd 能接管這項工作,讓 Apache 迅速服務下一個客戶請求。

19、如果你足夠勇敢的話,還可以採用 Silicon Graphics 的 Accelerated Apache 補丁。這個工程能使 Apache 1.3 快 10 倍,使 Apache 2.0 快 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/rc.d/rc.local 最後面加上一行: /sbin/hdparm -d1 –x66 -c3 -m16 /dev/hda 這樣以後每次開機,硬碟的 DMA 就會開啟,不必每次手動設定。添加前後你可以使用命令:hdparm -Tt /dev/hda 來測試對比一下。

3、調整緩沖區刷新參數

Linux內核中,包含了一些對於系統運行態的可設置參數。緩沖刷新的參數可以通過調整 /proc/sys/vm/bdflush文件來完成,這個文件的格式是這樣的:

「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等。

『捌』 怎麼提高linux伺服器性能,讓速度更快更穩定

1、我們平時登陸Linux伺服器的時候,都需要在輸入用戶名之後再等待一下,這個時間因不同而等的時間不一樣。

2、其實這個問題是由ssh里邊的配置造成的,只需要我們改一下即可正常快速登陸。

3、我們編輯sshd_config 這個文件:vi /etc/ssh/sshd_config。

4、然後在里邊打開 需要修改的行。

5、我們把前面的#號去了,然後把yes 改變為no,UseDNS no。

6、然後保存退出,再重啟下ssh服務測試下就可以了,service sshd restart。

『玖』 如何設置Sysctl.conf用以提高Linux的性能

Sysctl是一個允許您改變正在運行中的Linux系統的介面。它包含一些 TCP/IP 堆棧和虛擬內存系統的高級選項, 這可以讓有經驗的管理員提高引人注目的系統性能。用sysctl可以讀取設置超過五百個系統變數。基於這點,sysctl(8) 提供兩個功能:讀取和修改系統設置。
查看所有可讀變數:
% sysctl -a
讀一個指定的變數,例如 kern.maxproc:

% sysctl kern.maxproc kern.maxproc: 1044
要設置一個指定的變數,直接用 variable=value 這樣的語法:
# sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000
您可以使用sysctl修改系統變數,也可以通過編輯sysctl.conf文件來修改系統變數。sysctl.conf 看起來很像 rc.conf。它用 variable=value 的形式來設定值。指定的值在系統進入多用戶模式之後被設定。並不是所有的變數都可以在這個模式下設定。
sysctl 變數的設置通常是字元串、數字或者布爾型。 (布爾型用 1 來表示』yes』,用 0 來表示』no』)。
sysctl -w kernel.sysrq=0
sysctl -w kernel.core_uses_pid=1
sysctl -w net.ipv4.conf.default.accept_redirects=0
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_synack_retries=2
sysctl -w net.ipv4.tcp_keepalive_time=3600
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.tcp_sack=1
配置sysctl
編輯此文件:
vi /etc/sysctl.conf
如果希望屏蔽別人 ping 你的主機,則加入以下代碼:

# Disable ping requests
net.ipv4.icmp_echo_ignore_all = 1
編輯完成後,請執行以下命令使變動立即生效:
/sbin/sysctl -p
/sbin/sysctl -w net.ipv4.route.flush=1

###################
所有rfc相關的選項都是默認啟用的,因此網上的那些還自己寫rfc支持的都可以扔掉了:)
###############################

net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
#############################
通過源路由,攻擊者可以嘗試到達內部IP地址 --包括RFC1918中的地址,所以
不接受源路由信息包可以防止你的內部網路被探測。
#################################

net.inet.tcp.drop_synfin=1
###################################
安全參數,編譯內核的時候加了options TCP_DROP_SYNFIN才可以用,可以阻止某些OS探測。
##################################

kern.maxvnodes=8446
#################http://www.bsdlover.cn#########
vnode 是對文件或目錄的一種內部表達。 因此, 增加可以被操作系統利用的 vnode 數量將降低磁碟的 I/O。
一般而言, 這是由操作系統自行完成的,也不需要加以修改。但在某些時候磁碟 I/O 會成為瓶頸,
而系統的 vnode 不足, 則這一配置應被增加。此時需要考慮是非活躍和空閑內存的數量。
要查看當前在用的 vnode 數量:
# sysctl vfs.numvnodes
vfs.numvnodes: 91349
要查看最大可用的 vnode 數量:
# sysctl kern.maxvnodes
kern.maxvnodes: 100000
如果當前的 vnode 用量接近最大值,則將 kern.maxvnodes 值增大 1,000 可能是個好主意。
您應繼續查看 vfs.numvnodes 的數值, 如果它再次攀升到接近最大值的程度,
仍需繼續提高 kern.maxvnodes。 在 top(1) 中顯示的內存用量應有顯著變化,
更多內存會處於活躍 (active) 狀態。
####################################

kern.maxproc: 964
#################http://www.bsdlover.cn#########
Maximum number of processes
####################################
kern.maxprocperuid: 867
#################http://www.bsdlover.cn#########
Maximum processes allowed per userid
####################################
因為我的maxusers設置的是256,20+16*maxusers=4116。
maxprocperuid至少要比maxproc少1,因為init(8) 這個系統程序絕對要保持在運作狀態。
我給它設置的2068。

kern.maxfiles: 1928
#################http://www.bsdlover.cn#########
系統中支持最多同時開啟的文件數量,如果你在運行資料庫或大的很吃描述符的進程,那麼應該設置在20000以上,
比如kde這樣的桌面環境,它同時要用的文件非常多。
一般推薦設置為32768或者65536。
####################################

kern.argmax: 262144
#################http://www.bsdlover.cn#########
maximum number of bytes (or characters) in an argument list.
命令行下最多支持的參數,比如你在用find命令來批量刪除一些文件的時候
find . -name "*.old" -delete,如果文件數超過了這個數字,那麼會提示你數字太多的。
可以利用find . -name "*.old" -ok rm {} \;來刪除。
默認的參數已經足夠多了,因此不建議再做修改。
####################################

kern.securelevel: -1
#################http://www.bsdlover.cn#########
-1:這是系統默認級別,沒有提供任何內核的保護錯誤;
0:基本上作用不多,當你的系統剛啟動就是0級別的,當進入多用戶模式的時候就自動變成1級了。
1:在這個級別上,有如下幾個限制:
a. 不能通過kldload或者klnload載入或者卸載可載入內核模塊;
b. 應用程序不能通過/dev/mem或者/dev/kmem直接寫內存;
c. 不能直接往已經裝在(mounted)的磁碟寫東西,也就是不能格式化磁碟,但是可以通過標準的內核介面執行寫操作;
d. 不能啟動X-windows,同時不能使用chflags來修改文件屬性;
2:在 1 級別的基礎上還不能寫沒裝載的磁碟,而且不能在1秒之內製造多次警告,這個是防止DoS控制台的;
3:在 2 級別的級別上不允許修改IPFW防火牆的規則。
如果你已經裝了防火牆,並且把規則設好了,不輕易改動,那麼建議使用3級別,如果你沒有裝防火牆,而且還准備裝防火牆的話,不建議使用。
我們這里推薦使用 2 級別,能夠避免比較多對內核攻擊。
####################################

kern.maxfilesperproc: 1735
#################http://www.bsdlover.cn#########
每個進程能夠同時打開的最大文件數量,網上很多資料寫的是32768
除非用非同步I/O或大量線程,打開這么多的文件恐怕是不太正常的。
我個人建議不做修改,保留默認。
####################################

kern.ipc.maxsockbuf: 262144
#################http://www.bsdlover.cn#########
最大的套接字緩沖區,網上有建議設置為2097152(2M)、8388608(8M)的。
我個人倒是建議不做修改,保持默認的256K即可,緩沖區大了可能造成碎片、阻塞或者丟包。
####################################

kern.ipc.somaxconn: 128
#################http://www.bsdlover.cn#########
最大的等待連接完成的套接字隊列大小,即並發連接數。
高負載伺服器和受到Dos攻擊的系統也許會因為這個隊列被塞滿而不能提供正常服務。
默認為128,推薦在1024-4096之間,根據機器和實際情況需要改動,數字越大佔用內存也越大。
####################################

kern.ipc.nmbclusters: 4800
#################http://www.bsdlover.cn#########
這個值用來調整系統在開機後所要分配給網路 mbufs 的 cluster 數量,
由於每個 cluster 大小為 2K,所以當這個值為 1024 時,也是會用到 2MB 的核心內存空間。
假設我們的網頁同時約有 1000 個聯機,而 TCP 傳送及接收的暫存區大小都是 16K,
則最糟的情況下,我們會需要 (16K+16K) * 1024,也就是 32MB 的空間,
然而所需的 mbufs 大概是這個空間的二倍,也就是 64MB,所以所需的 cluster 數量為 64MB/2K,也就是 32768。
對於內存有限的機器,建議值是 1024 到 4096 之間,而當擁有海量存儲器空間時,我們可以將它設定為 4096 到 32768 之間。
我們可以使用 netstat 這個指令並加上參數 -m 來查看目前所使用的 mbufs 數量。
要修改這個值必須在一開機就修改,所以只能在 /boot/loader.conf 中加入修改的設定
kern.ipc.nmbclusters=32768
####################################

kern.ipc.shmmax: 33554432
#################http://www.bsdlover.cn#########
共享內存和信號燈("System VIPC")如果這些過小的話,有些大型的軟體將無法啟動
安裝xine和mplayer提示的設置為67108864,即64M,
如果內存多的話,可以設置為134217728,即128M
####################################

kern.ipc.shmall: 8192
#################http://www.bsdlover.cn#########
共享內存和信號燈("System VIPC")如果這些過小的話,有些大型的軟體將無法啟動
安裝xine和mplayer提示的設置為32768
####################################

kern.ipc.shm_use_phys: 0
#################http://www.bsdlover.cn#########
如果我們將它設成 1,則所有 System V 共享內存 (share memory,一種程序間溝通的方式)部份都會被留在實體的內存 (physical memory) 中,
而不會被放到硬碟上的 swap 空間。我們知道物理內存的存取速度比硬碟快許多,而當物理內存空間不足時,
部份數據會被放到虛擬的內存上,從物理內存和虛擬內存之間移轉的動作就叫作 swap。如果時常做 swap 的動作,
則需要一直對硬碟作 I/O,速度會很慢。因此,如果我們有大量的程序 (數百個) 需要共同分享一個小的共享內存空間,
或者是共享內存空間很大時,我們可以將這個值打開。
這一項,我個人建議不做修改,除非你的內存非常大。
####################################

kern.ipc.shm_allow_removed: 0
#################http://www.bsdlover.cn#########
共享內存是否允許移除?這項似乎是在fb下裝vmware需要設置為1的,否則會有載入SVGA出錯的提示
作為伺服器,這項不動也罷。
####################################

kern.ipc.numopensockets: 12
#################http://www.bsdlover.cn#########
已經開啟的socket數目,可以在最繁忙的時候看看它是多少,然後就可以知道maxsockets應該設置成多少了。
####################################

kern.ipc.maxsockets: 1928
#################http://www.bsdlover.cn#########
這是用來設定系統最大可以開啟的 socket 數目。如果您的伺服器會提供大量的 FTP 服務,
而且常快速的傳輸一些小檔案,您也許會發現常傳輸到一半就中斷。因為 FTP 在傳輸檔案時,
每一個檔案都必須開啟一個 socket 來傳輸,但關閉 socket 需要一段時間,如果傳輸速度很快,
而檔案又多,則同一時間所開啟的 socket 會超過原本系統所許可的值,這時我們就必須把這個值調大一點。
除了 FTP 外,也許有其它網路程序也會有這種問題。
然而,這個值必須在系統一開機就設定好,所以如果要修改這項設定,我們必須修改 /boot/loader.conf 才行
kern.ipc.maxsockets="16424"
####################################

kern.ipc.nsfbufs: 1456
#################http://www.bsdlover.cn#########
經常使用 sendfile(2) 系統調用的繁忙的伺服器,
有必要通過 NSFBUFS 內核選項或者在 /boot/loader.conf (查看 loader(8) 以獲得更多細節) 中設置它的值來調節 sendfile(2) 緩存數量。
這個參數需要調節的普通原因是在進程中看到 sfbufa 狀態。sysctl kern.ipc.nsfbufs 變數在內核配置變數中是只讀的。
這個參數是由 kern.maxusers 決定的,然而它可能有必要因此而調整。
在/boot/loader.conf里加入
kern.ipc.nsfbufs="2496"
####################################

kern.maxusers: 59
#################http://www.bsdlover.cn#########
maxusers 的值決定了處理程序所容許的最大值,20+16*maxusers 就是你將得到的所容許處理程序。
系統一開機就必須要有 18 個處理程序 (process),即便是簡單的執行指令 man 又會產生 9 個 process,
所以將這個值設為 64 應該是一個合理的數目。
如果你的系統會出現 proc table full 的訊息的話,可以就把它設大一點,例如 128。
除非您的系統會需要同時開啟很多檔案,否則請不要設定超過 256。

可以在 /boot/loader.conf 中加入該選項的設定,
kern.maxusers=256
####################################

kern.coremp: 1
#################http://www.bsdlover.cn#########
如果設置為0,則程序異常退出時不會生成core文件,作為伺服器,不建議這樣。
####################################

kern.corefile: %N.core
#################http://www.bsdlover.cn#########
可設置為kern.corefile="/data/coremp/%U-%P-%N.core"
其中 %U是UID,%P是進程ID,%N是進程名,當然/data/coremp必須是一個實際存在的目錄
####################################

vm.swap_idle_enabled: 0
vm.swap_idle_threshold1: 2
vm.swap_idle_threshold2: 10
#########################
在有很多用戶進入、離開系統和有很多空閑進程的大的多用戶系統中很有用。
可以讓進程更快地進入內存,但它會吃掉更多的交換和磁碟帶寬。
系統默認的頁面調度演算法已經很好了,最好不要更改。
########################

vfs.ufs.dirhash_maxmem: 2097152
#########################
默認的dirhash最大內存,默認2M
增加它有助於改善單目錄超過100K個文件時的反復讀目錄時的性能
建議修改為33554432(32M)
#############################

vfs.vmiodirenable: 1
#################
這個變數控制目錄是否被系統緩存。大多數目錄是小的,在系統中只使用單個片斷(典型的是1K)並且在緩存中使用的更小 (典型的是512位元組)。
當這個變數設置為關閉 (0) 時,緩存器僅僅緩存固定數量的目錄,即使您有很大的內存。
而將其開啟 (設置為1) 時,則允許緩存器用 VM 頁面緩存來緩存這些目錄,讓所有可用內存來緩存目錄。
不利的是最小的用來緩存目錄的核心內存是大於 512 位元組的物理頁面大小(通常是 4k)。
我們建議如果您在運行任何操作大量文件的程序時保持這個選項打開的默認值。
這些服務包括 web 緩存,大容量郵件系統和新聞系統。
盡管可能會浪費一些內存,但打開這個選項通常不會降低性能。但還是應該檢驗一下。
####################

vfs.hirunningspace: 1048576
############################
這個值決定了系統可以將多少數據放在寫入儲存設備的等候區。通常使用默認值即可,
但當我們有多顆硬碟時,我們可以將它調大為 4MB 或 5MB。
注意這個設置成很高的值(超過緩存器的寫極限)會導致壞的性能。
不要盲目的把它設置太高!高的數值會導致同時發生的讀操作的遲延。
#############################

『拾』 基於Linux系統的Web伺服器的安裝與配置論文開題報告怎麼寫

課題名稱:基於Linux系統的Web伺服器的安裝與配置
姓 名: 班 級:
完成時間: 指導老師:
內容安排:
首先對WEB伺服器的可行性進行研究,然後對主機的硬體和軟體進行需求分析,在此基礎上進行概要設計和詳細設計。接下來對軟體框架的各組成部分的實現分章進行詳細的描述,最後總結實現一些關鍵的解決方法和改進的幾個思路。
1、 緒論
簡單介紹了一下架設WEB網站的意義, WEB伺服器的工作原理, 企業背景介紹,並簡要介紹了論文的內容要求。
2、 Web伺服器的基礎知識
對什麼是WEB服務、伺服器軟體Apache、腳本語言PHP、HTTP協議作了詳細的介紹。
3、 Web伺服器的設計過程
根據可行性的研究,對整個系統的軟體和硬體需求進行分析。對軟硬體進行架構設計,描述如何實現,包括基礎理論分析,設計思路和設計方法,並對具體的設計步驟進行了重點理論解析。
4、 WEB伺服器的建立
對系統的運行進行安裝,了解Apache的體系結構及性能、PHP腳本配置環境,用Apache進行設置虛擬主機,實現基於IP地址虛擬主機服務,先規劃IP地址:為虛擬主機申請新的IP地址,讓ISP做好相應的域名解析工作,為網卡設置IP別名,重新設置「/etc/httpd/conf/httpd.conf」文件,建立相應的目錄,將主頁的內容放到相應的目錄中去就行了,再配置一下PHP語言腳本環境。測試一下能否實現的可行性。
5、問題和改進
實現中可能遇到的問題及解決方法,伺服器改進的方向。
6、作簡要的總結。

論文的技術路線及預期目標:
技術路線:在Linux平台下配置一個WEB伺服器環境,使網站正常運行,首先需要在一台PC機上創建一個Linux平台,由於我們絕大部分PC用的是Windows的操作系統,對此,我們可採用虛擬機VMware Workstation在Windows系統下虛擬一個Linux平台,然後運用與Linux兼容性良好的Apache服務軟體、PHP語言腳本配置環境,基於Linux操作系統,架設一個穩定、安全、高效的WEB伺服器環境,可支持運行以PHP或者HTML為基礎的網頁,要求正確安裝好操作系統Linux WEB伺服器軟體Apache、腳本語言PHP,了解有關參數,同時合理設置,使得伺服器環境簡易高效。
預期目標:在Linux環境下運用兼容性良好的Apache服務軟體實現一個Web伺服器,在區域網內,將此伺服器程序在一台計算機上運行,使網內其它計算機訪問這台伺服器時,實現HTTP協議的傳輸,並能解析以PHP或者HTML為基礎的網頁。

課題進度計劃:

完成課題所需條件及落實措施:
所需條件:計算機一台、CentOS 5.2版本的Linux操作系統、虛擬機軟體VMware Workstation及各種相關軟體,有關Linux操作系統方面的資料(書籍、網路資料)。
落實措施:在計算機上先安裝虛擬機軟體VMware Workstation,採用虛擬機VMware在Windows系統下虛擬一個Linux平台,然後運用與Linux兼容性良好的Apache服務軟體,PHP語言腳本配置環境。

參考文獻、資料:
[1] Red Hat Linux大全,David Pitls編著,姚彥忠 譯,機械工業出版社,1999年1月出版
[2] Linux伺服器性能調整,(美)約翰遜,(美)威曾格,(美)普拉瓦提 著,韓智文 譯,清華大學出版社,2009年9月出版
[3] Linux伺服器架設,楊鵬編著,清華大學出版社,2008年出版
[4] Linux網路伺服器應用教程,王興主編,中國鐵道出版社,2009年9月出版

閱讀全文

與linux伺服器性能調整相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163