導航:首頁 > 網站優化 > linux網站伺服器優化

linux網站伺服器優化

發布時間:2021-03-12 23:31:10

1、公司的網站用的是自己的linux伺服器,最近有用戶反映網站打開的速度比平時慢,個人認為出現這樣的問題肯定

只能用排除法!先排除網路問題!然後排除是不是機器硬體問題~在排除承載網站的 資料庫軟體或者web伺服器軟體的問題等!

2、怎麼優化linux伺服器,現在很卡

慢只是感覺,需要你去作性能測試簡單的是top看看誰佔了資源,類似windows下的任務管理器看內存free-m情況另外還有測試命令如iostat之類的

3、linux網站伺服器特別慢。重啟apache以後可以,過一會又慢 怎麼回事幫忙解決一下!謝謝

基本可以判斷是你內存嚴重不夠用的。
free -m看看內存使用情況!

4、如何優化一台linux web伺服器

?

5、linux系統做網站伺服器好么?有什麼優點缺點?

Linux最早由Linus Benedict Torvalds在1991年開始編寫。在這之前,Richard Stallman創建了Free Software Foundation(FSF)組織以及GNU項目,並不斷的編寫創建GNU程序(此類程序的許可方式均為GPL: General Public License)。在不斷的有傑出的程序員和開發者加入到GNU組織中後,便造就了今天我們所看到的Linux,或稱GNU/Linux。Linux的發行版本可以大體分為兩類,一類是商業公司維護的發行版本,一類是社區組織維護的發行版本,前者以著名的Redhat(RHEL)為代表,後者以Debian為代表。下面介紹一下各個發行版本的特點:Redhat,應該稱為Redhat系列,包括RHEL(Redhat Enterprise Linux,也就是所謂的Redhat Advance Server,收費版本)、Fedora Core(由原來的Redhat桌面版本發展而來,免費版本)、CentOS(RHEL的社區克隆版本,免費)。Redhat應該說是在國內使用人群最多的Linux版本,甚至有人將Redhat等同於Linux,而有些老鳥更是只用這一個版本的Linux。所以這個版本的特點就是使用人群數量大,資料非常多,言下之意就是如果你有什麼不明白的地方,很容易找到人來問,而且網上的一般Linux教程都是以Redhat為例來講解的。Redhat系列的包管理方式採用的是基於RPM包的YUM包管理方式,包分發方式是編譯好的二進制文件。穩定性方面RHEL和CentOS的穩定性非常好,適合於伺服器使用,但是Fedora Core的穩定性較差,最好只用於桌面應用。Debian,或者稱Debian系列,包括Debian和Ubuntu等。Debian是社區類Linux的典範,是迄今為止最遵循GNU規范的Linux系統。Debian最早由Ian Murdock於1993年創建,分為三個版本分支(branch): stable, testing 和 unstable。其中,unstable為最新的測試版本,其中包括最新的軟體包,但是也有相對較多的bug,適合桌面用戶。testing的版本都經過unstable中的測試,相對較為穩定,也支持了不少新技術(比如SMP等)。而stable一般只用於伺服器,上面的軟體包大部分都比較過時,但是穩定和安全性都非常的高。Debian最具特色的是apt-get / dpkg包管理方式,其實Redhat的YUM也是在模仿Debian的APT方式,但在二進制文件發行方式中,APT應該是最好的了。Debian的資料也很豐富,有很多支持的社區,有問題求教也有地方可去:)Ubuntu嚴格來說不能算一個獨立的發行版本,Ubuntu是基於Debian的unstable版本加強而來,可以這么說,Ubuntu就是一個擁有Debian所有的優點,以及自己所加強的優點的近乎完美的 Linux桌面系統。根據選擇的桌面系統不同,有三個版本可供選擇,基於Gnome的Ubuntu,基於KDE的Kubuntu以及基於Xfc的Xubuntu。特點是界面非常友好,容易上手,對硬體的支持非常全面,是最適合做桌面系統的Linux發行版本。Gentoo,偉大的Gentoo是Linux世界最年輕的發行版本,正因為年輕,所以能吸取在她之前的所有發行版本的優點,這也是Gentoo被稱為最完美的Linux發行版本的原因之一。Gentoo最初由Daniel Robbins(FreeBSD的開發者之一)創建,首個穩定版本發布於2002年。由於開發者對FreeBSD的熟識,所以Gentoo擁有媲美FreeBSD的廣受美譽的ports系統 ——Portage包管理系統。不同於APT和YUM等二進制文件分發的包管理系統,Portage是基於源代碼分發的,必須編譯後才能運行,對於大型軟體而言比較慢,不過正因為所有軟體都是在本地機器編譯的,在經過各種定製的編譯參數優化後,能將機器的硬體性能發揮到極致。Gentoo是所有Linux發行版本里安裝最復雜的,但是又是安裝完成後最便於管理的版本,也是在相同硬體環境下運行最快的版本。最後,介紹一下FreeBSD,需要強調的是:FreeBSD並不是一個Linux系統!但FreeBSD與Linux的用戶群有相當一部分是重合的,二者支持的硬體環境也比較一致,所採用的軟體也比較類似,所以可以將FreeBSD視為一個Linux版本來比較。FreeBSD擁有兩個分支:stable和current。顧名思義,stable是穩定版,而 current則是添加了新技術的測試版。FreeBSD採用Ports包管理系統,與Gentoo類似,基於源代碼分發,必須在本地機器編後後才能運行,但是Ports系統沒有Portage系統使用簡便,使用起來稍微復雜一些。FreeBSD的最大特點就是穩定和高效,是作為伺服器操作系統的最佳選擇,但對硬體的支持沒有Linux完備,所以並不適合作為桌面系統。下面給為選擇一個Linux發行版本犯愁的朋友一些建議:如果你只是需要一個桌面系統,而且既不想使用盜版,又不想花大量的錢購買商業軟體,那麼你就需要一款適合桌面使用的Linux發行版本了,如果你不想自己定製任何東西,不想在系統上浪費太多時間,那麼很簡單,你就根據自己的愛好在ubuntu、kubuntu以及xubuntu中選一款吧,三者的區別僅僅是桌面程序的不一樣。如果你需要一個桌面系統,而且還想非常靈活的定製自己的Linux系統,想讓自己的機器跑得更歡,不介意在Linux系統安裝方面浪費一點時間,那麼你的唯一選擇就是Gentoo,盡情享受Gentoo帶來的自由快感吧!如果你需要的是一個伺服器系統,而且你已經非常厭煩各種Linux的配置,只是想要一個比較穩定的伺服器系統而已,那麼你最好的選擇就是CentOS了,安裝完成後,經過簡單的配置就能提供非常穩定的服務了。如果你需要的是一個堅如磐石的非常穩定的伺服器系統,那麼你的唯一選擇就是FreeBSD。

6、如何優化linux伺服器

1、卸載不必要軟體包
2、netstat -nutlp檢查埠並關閉不必要的埠
3、關閉開機自啟動服務。例如chkconfig ntpd off
4、優化系統參數,例如修改sysctl.conf
5、根據實際情況開啟防火牆

7、您好,我的論壇linux nginx伺服器 速度有些慢,請問有優化方法嗎

一、編譯安裝過程優化

1.減小Nginx編譯後的文件大小
在編譯Nginx時,默認以debug模式進行,而在debug模式下會插入很多跟蹤和ASSERT之類的信息,編譯完成後,一個Nginx要有好幾兆字
節。在編譯前取消Nginx的debug模式,編譯完成後Nginx只有幾百千位元組,因此可以在編譯之前,修改相關源碼,取消debug模式,具體方法如
下:
在Nginx源碼文件被解壓後,找到源碼目錄下的auto/cc/gcc文件,在其中找到如下幾行:
# debug CFLAGS=」$CFLAGS -g」

注釋掉或刪掉這兩行,即可取消debug模式。

2.為特定的CPU指定CPU類型編譯優化
在編譯Nginx時,默認的GCC編譯參數是「-O」,要優化GCC編譯,可以使用以下兩個參數:
--with-cc-opt='-O3'
--with-cpu-opt=CPU #為特定的 CPU 編譯,有效的值包括:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64
要確定CPU類型,可以通過如下命令:
[root@localhost home]#cat /proc/cpuinfo | grep "model name"

二、利用TCMalloc優化Nginx的性能
TCMalloc的全稱為Thread-Caching
Malloc,是谷歌開發的開源工具「google-perftools」中的一個成員。與標準的glibc庫的malloc相比,TCMalloc庫在
內存分配效率和速度上要高很多,這在很大程度上提高了伺服器在高並發情況下的性能,從而降低系統負載。下面簡單介紹如何為Nginx添加TCMalloc
庫支持。
要安裝TCMalloc庫,需要安裝libunwind(32位操作系統不需要安裝)和google-perftools兩個軟體包,libunwind
庫為基於64位CPU和操作系統的程序提供了基本函數調用鏈和函數調用寄存器功能。下面介紹利用TCMalloc優化Nginx的具體操作過程:

1.安裝libunwind庫
可以從http://download.savannah.gnu.org/releases/libunwind下載相應的libunwind版本,這里下載的是libunwind-0.99-alpha.tar.gz,安裝過程如下:

[root@localhost home]#tar zxvf libunwind-0.99-alpha.tar.gz [root@localhost home]# cd libunwind-0.99-alpha/ [root@localhost libunwind-0.99-alpha]#CFLAGS=-fPIC ./configure [root@localhost libunwind-0.99-alpha]#make CFLAGS=-fPIC [root@localhost libunwind-0.99-alpha]#make CFLAGS=-fPIC install

2.安裝google-perftools
可以從http://google-perftools.googlecode.com下載相應的google-perftools版本,這里下載的是google-perftools-1.8.tar.gz,安裝過程如下:

[root@localhost home]#tar zxvf google-perftools-1.8.tar.gz [root@localhost home]#cd google-perftools-1.8/ [root@localhost google-perftools-1.8]# ./configure [root@localhost google-perftools-1.8]#make && make install [root@localhost google-perftools-1.8]#echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf [root@localhost google-perftools-1.8]# ldconfig

至此,google-perftools安裝完成。

3.重新編譯Nginx
為了使Nginx支持google-perftools,需要在安裝過程中添加「–with-google_perftools_mole」選項重新編譯Nginx,安裝代碼如下:

[[email protected]]#./configure \ >--with-google_perftools_mole --with-http_stub_status_mole --prefix=/opt/nginx [root@localhost nginx-0.7.65]#make [root@localhost nginx-0.7.65]#make install

到這里Nginx安裝完成。

4.為google-perftools添加線程目錄
創建一個線程目錄,這里將文件放在/tmp/tcmalloc下,操作如下:

[root@localhost home]#mkdir /tmp/tcmalloc [root@localhost home]#chmod 0777 /tmp/tcmalloc

5.修改Nginx主配置文件
修改nginx.conf文件,在pid這行的下面添加如下代碼:

#pid logs/nginx.pid; google_perftools_profiles /tmp/tcmalloc;

接著,重啟Nginx,完成google-perftools的載入。

6.驗證運行狀態
為了驗證google-perftools已經正常載入,通過如下命令查看:

[root@ localhost home]# lsof -n | grep tcmalloc nginx 2395 nobody 9w REG 8,8 0 1599440 /tmp/tcmalloc.2395 nginx 2396 nobody 11w REG 8,8 0 1599443 /tmp/tcmalloc.2396 nginx 2397 nobody 13w REG 8,8 0 1599441 /tmp/tcmalloc.2397 nginx 2398 nobody 15w REG 8,8 0 1599442 /tmp/tcmalloc.2398

由於在Nginx配置文件中,設置worker_processes的值為4,因此開啟了4個Nginx線程,每個線程會有一行記錄。每個線程文件後面的數字值就是啟動的Nginx的PID值。
至此,利用TCMalloc優化Nginx的操作完成。

三、Nginx內核參數優化
內核參數的優化,主要是在Linux系統中針對Nginx應用而進行的系統內核參數優化,常見的優化參數值如下。
下面給出一個優化實例以供參考:
net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_syncookies = 1 net.core.somaxconn = 262144 net.core.netdev_max_backlog = 262144 net.ipv4.tcp_max_orphans = 262144 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_fin_timeout = 1 net.ipv4.tcp_keepalive_time = 30
將上面的內核參數值加入/etc/sysctl.conf文件中,然後執行如下命令使之生效:
[root@ localhost home]#/sbin/sysctl -p
下面是對實例中選項的含義進行介紹:
 net.ipv4.tcp_max_tw_buckets參數用來設定timewait的數量,默認是180000,這里設為6000。
 net.ipv4.ip_local_port_range選項用來設定允許系統打開的埠范圍。
 net.ipv4.tcp_tw_recycle選項用於設置啟用timewait快速回收。
 net.ipv4.tcp_tw_reuse選項用於設置開啟重用,允許將TIME-WAIT sockets重新用於新的TCP連接。
 net.ipv4.tcp_syncookies選項用於設置開啟SYN Cookies,當出現SYN等待隊列溢出時,啟用cookies進行處理。
 net.core.somaxconn選項默認值是128, 這個參數用於調節系統同時發起的tcp連接數,在高並發的請求中,默認的值可能會導致鏈接超時或者重傳,因此,需要結合並發請求數來調節此值。
 net.core.netdev_max_backlog選項表示當每個網路介面接收數據包的速率比內核處理這些包的速率快時,允許發送到隊列的數據包的最大數目。
 net.ipv4.tcp_max_orphans選項用於設定系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數
字,孤立連接將立即被復位並列印出警告信息。這個限制只是為了防止簡單的DoS攻擊。不能過分依靠這個限制甚至人為減小這個值,更多的情況是增加這個值。
 net.ipv4.tcp_max_syn_backlog選項用於記錄那些尚未收到客戶端確認信息的連接請求的最大值。對於有128MB內存的系統而言,此參數的默認值是1024,對小內存的系統則是128。
 net.ipv4.tcp_synack_retries參數的值決定了內核放棄連接之前發送SYN+ACK包的數量。
 net.ipv4.tcp_syn_retries選項表示在內核放棄建立連接之前發送SYN包的數量。
 net.ipv4.tcp_fin_timeout選項決定了套接字保持在FIN-WAIT-2狀態的時間。默認值是60秒。正確設置這個值非常重要,有時候即使一個負載很小的Web伺服器,也會出現因為大量的死套接字而產生內存溢出的風險。
 net.ipv4.tcp_keepalive_time選項表示當keepalive啟用的時候,TCP發送keepalive消息的頻度。默認值是2(單位是小時)。

8、linux系統性能怎麼優化

linux系統性能怎麼優化
一、前提
我們可以在文章的開始就列出一個列表,列出可能影響Linux操作系統性能的一些調優參數,但這樣做其實並沒有什麼價值。因為性能調優是一個非常困難的任務,它要求對硬體、操作系統、和應用都有著相當深入的了解。如果性能調優非常簡單的話,那些我們要列出的調優參數早就寫入硬體的微碼或者操作系統中了,我們就沒有必要再繼續讀這篇文章了。正如下圖所示,伺服器的性能受到很多因素的影響。
當面對一個使用單獨IDE硬碟的,有20000用戶的資料庫伺服器時,即使我們使用數周時間去調整I/O子系統也是徒勞無功的,通常一個新的驅動或者應用程序的一個更新(如SQL優化)卻可以使這個伺服器的性能得到明顯的提升。正如我們前面提到的,不要忘記系統的性能是受多方面因素影響的。理解操作系統管理系統資源的方法將幫助我們在面對問題時更好的判斷應該對哪個子系統進行調整。
二、Linux的CPU調度
任何計算機的基本功能都十分簡單,那就是計算。為了實現計算的功能就必須有一個方法去管理計算資源、處理器和計算任務(也被叫做線程或者進程)。非常感謝Ingo Molnar,他為Linux內核帶來了O(1)CPU調度器,區別於舊有的O(n)調度器,新的調度器是動態的,可以支持負載均衡,並以恆定的速度進行操作。
新調度器的可擴展性非常好,無論進程數量或者處理器數量,並且調度器本身的系統開銷更少。新調取器的演算法使用兩個優先順序隊列。
引用
・活動運行隊列
・過期運行隊列
調度器的一個重要目標是根據優先順序許可權有效地為進程分配CPU 時間片,當分配完成後它被列在CPU的運行隊列中,除了 CPU 的運行隊列之外,還有一個過期運行隊列。當活動運行隊列中的一個任務用光自己的時間片之後,它就被移動到過期運行隊列中。在移動過程中,會對其時間片重新進行計算。如果活動運行隊列中已經沒有某個給定優先順序的任務了,那麼指向活動運行隊列和過期運行隊列的指針就會交換,這樣就可以讓過期優先順序列表變成活動優先順序的列表。通常互動式進程(相對與實時進程而言)都有一個較高的優先順序,它佔有更長的時間片,比低優先順序的進程獲得更多的計算時間,但通過調度器自身的調整並不會使低優先順序的進程完全被餓死。新調度器的優勢是顯著的改變Linux內核的可擴展性,使新內核可以更好的處理一些有大量進程、大量處理器組成的企業級應用。新的O(1)調度器包含仔2.6內核中,但是也向下兼容2.4內核。
新調度器另外一個重要的優勢是體現在對NUMA(non-uniform memory architecture)和SMP(symmetric multithreading processors)的支持上,例如INTEL@的超線程技術。
改進的NUMA支持保證了負載均衡不會發生在CECs或者NUMA節點之間,除非發生一個節點的超出負載限度。
三、Linux的內存架構
今天我們面對選擇32位操作系統還是64位操作系統的情況。對企業級用戶它們之間最大的區別是64位操作系統可以支持大於4GB的內存定址。從性能角度來講,我們需要了解32位和64位操作系統都是如何進行物理內存和虛擬內存的映射的。
在上面圖示中我們可以看到64位和32位Linux內核在定址上有著顯著的不同。
在32位架構中,比如IA-32,Linux內核可以直接定址的范圍只有物理內存的第一個GB(如果去掉保留部分還剩下896MB),訪問內存必須被映射到這小於1GB的所謂ZONE_NORMAL空間中,這個操作是由應用程序完成的。但是分配在ZONE_HIGHMEM中的內存頁將導致性能的降低。
在另一方面,64位架構比如x86-64(也稱作EM64T或者AMD64)。ZONE_NORMAL空間將擴展到64GB或者128GB(實際上可以更多,但是這個數值受到操作系統本身支持內存容量的限制)。正如我們看到的,使用64位操作系統我們排除了因ZONE_HIGHMEM部分內存對性能的影響的情況。
實際中,在32位架構下,由於上面所描述的內存定址問題,對於大內存,高負載應用,會導致死機或嚴重緩慢等問題。雖然使用hugemen核心可緩解,但採取x86_64架構是最佳的解決辦法。
四、虛擬內存管理
因為操作系統將內存都映射為虛擬內存,所以操作系統的物理內存結構對用戶和應用來說通常都是不可見的。如果想要理解Linux系統內存的調優,我們必須了解Linux的虛擬內存機制。應用程序並不分配物理內存,而是向Linux內核請求一部分映射為虛擬內存的內存空間。如下圖所示虛擬內存並不一定是映射物理內存中的空間,如果應用程序有一個大容量的請求,也可能會被映射到在磁碟子系統中的swap空間中。
另外要提到的是,通常應用程序不直接將數據寫到磁碟子系統中,而是寫入緩存和緩沖區中。Bdflush守護進程將定時將緩存或者緩沖區中的數據寫到硬碟上。
Linux內核處理數據寫入磁碟子系統和管理磁碟緩存是緊密聯系在一起的。相對於其他的操作系統都是在內存中分配指定的一部分作為磁碟緩存,Linux處理內存更加有效,默認情況下虛擬內存管理器分配所有可用內存空間作為磁碟緩存,這就是為什麼有時我們觀察一個配置有數G內存的Linux系統可用內存只有20MB的原因。
同時Linux使用swap空間的機制也是相當高效率的,如上圖所示虛擬內存空間是由物理內存和磁碟子系統中的swap空間共同組成的。如果虛擬內存管理器發現一個已經分配完成的內存分頁已經長時間沒有被調用,它將把這部分內存分頁移到swap空間中。經常我們會發現一些守護進程,比如getty,會隨系統啟動但是卻很少會被應用到。這時為了釋放昂貴的主內存資源,系統會將這部分內存分頁移動到swap空間中。上述就是Linux使用swap空間的機制,當swap分區使用超過50%時,並不意味著物理內存的使用已經達到瓶頸了,swap空間只是Linux內核更好的使用系統資源的一種方法。
簡單理解:Swap usage只表示了Linux管理內存的有效性。對識別內存瓶頸來說,Swap In/Out才是一個比較又意義的依據,如果Swap In/Out的值長期保持在每秒200到300個頁面通常就表示系統可能存在內存的瓶頸。下面的事例是好的狀態:
引用
# vmstat
procs ———–memory————- —swap– —–io—- –system– —-cpu—-
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 5696 6904 28192 50496 0 0 88 117 61 29 11 8 80 1
五、模塊化的I/O調度器
就象我們知道的Linux2.6內核為我們帶來了很多新的特性,這其中就包括了新的I/O調度機制。舊的2.4內核使用一個單一的I/O調度器,2.6 內核為我們提供了四個可選擇的I/O調度器。因為Linux系統應用在很廣闊的范圍里,不同的應用對I/O設備和負載的要求都不相同,例如一個筆記本電腦和一個10000用戶的資料庫伺服器對I/O的要求肯定有著很大的區別。
引用
(1).Anticipatory
anticipatory I/O調度器創建假設一個塊設備只有一個物理的查找磁頭(例如一個單獨的SATA硬碟),正如anticipatory調度器名字一樣,anticipatory調度器使用「anticipatory」的演算法寫入硬碟一個比較大的數據流代替寫入多個隨機的小的數據流,這樣有可能導致寫 I/O操作的一些延時。這個調度器適用於通常的一些應用,比如大部分的個人電腦。
(2).Complete Fair Queuing (CFQ)
Complete Fair Queuing(CFQ)調度器是Red Flag DC Server 5使用的標准演算法。CFQ調度器使用QoS策略為系統內的所有任務分配相同的帶寬。CFQ調度器適用於有大量計算進程的多用戶系統。它試圖避免進程被餓死和實現了比較低的延遲。
(3).Deadline
deadline調度器是使用deadline演算法的輪詢的調度器,提供對I/O子系統接近實時的操作,deadline調度器提供了很小的延遲和維持一個很好的磁碟吞吐量。如果使用deadline演算法請確保進程資源分配不會出現問題。
(4).NOOP
NOOP調度器是一個簡化的調度程序它只作最基本的合並與排序。與桌面系統的關系不是很大,主要用在一些特殊的軟體與硬體環境下,這些軟體與硬體一般都擁有自己的調度機制對內核支持的要求很小,這很適合一些嵌入式系統環境。作為桌面用戶我們一般不會選擇它。
六、網路子系統
新的網路中斷緩和(NAPI)對網路子系統帶來了改變,提高了大流量網路的性能。Linux內核在處理網路堆棧時,相比降低系統佔用率和高吞吐量更關注可靠性和低延遲。所以在某些情況下,Linux建立一個防火牆或者文件、列印、資料庫等企業級應用的性能可能會低於相同配置的Windows伺服器。
在傳統的處理網路封包的方式中,如下圖藍色箭頭所描述的,一個乙太網封包到達網卡介面後,如果MAC地址相符合會被送到網卡的緩沖區中。網卡然後將封包移到操作系統內核的網路緩沖區中並且對CPU發出一個硬中斷,CPU會處理這個封包到相應的網路堆棧中,可能是一個TCP埠或者Apache應用中。
這是一個處理網路封包的簡單的流程,但從中我們可以看到這個處理方式的缺點。正如我們看到的,每次適合網路封包到達網路介面都將對CPU發出一個硬中斷信號,中斷CPU正在處理的其他任務,導致切換動作和對CPU緩存的操作。你可能認為當只有少量的網路封包到達網卡的情況下這並不是個問題,但是千兆網路和現代的應用將帶來每秒鍾成千上萬的網路數據,這就有可能對性能造成不良的影響。
正是因為這個情況,NAPI在處理網路通訊的時候引入了計數機制。對第一個封包,NAPI以傳統的方式進行處理,但是對後面的封包,網卡引入了POLL 的輪詢機制:如果一個封包在網卡DMA環的緩存中,就不再為這個封包申請新的中斷,直到最後一個封包被處理或者緩沖區被耗盡。這樣就有效的減少了因為過多的中斷CPU對系統性能的影響。同時,NAPI通過創建可以被多處理器執行的軟中斷改善了系統的可擴展性。NAPI將為大量的企業級多處理器平台帶來幫助,它要求一個啟用NAPI的驅動程序。在今天很多驅動程序默認沒有啟用NAPI,這就為我們調優網路子系統的性能提供了更廣闊的空間。
七、理解Linux調優參數
因為Linux是一個開源操作系統,所以又大量可用的性能監測工具。對這些工具的選擇取決於你的個人喜好和對數據細節的要求。所有的性能監測工具都是按照同樣的規則來工作的,所以無論你使用哪種監測工具都需要理解這些參數。下面列出了一些重要的參數,有效的理解它們是很有用處的。
(1)處理器參數
引用
・CPU utilization
這是一個很簡單的參數,它直觀的描述了每個CPU的利用率。在xSeries架構中,如果CPU的利用率長時間的超過80%,就可能是出現了處理器的瓶頸。
・Runable processes
這個值描述了正在准備被執行的進程,在一個持續時間里這個值不應該超過物理CPU數量的10倍,否則CPU方面就可能存在瓶頸。
・Blocked
描述了那些因為等待I/O操作結束而不能被執行的進程,Blocked可能指出你正面臨I/O瓶頸。
・User time
描述了處理用戶進程的百分比,包括nice time。如果User time的值很高,說明系統性能用在處理實際的工作。
・System time
描述了CPU花費在處理內核操作包括IRQ和軟體中斷上面的百分比。如果system time很高說明系統可能存在網路或者驅動堆棧方面的瓶頸。一個系統通常只花費很少的時間去處理內核的操作。
・Idle time
描述了CPU空閑的百分比。
・Nice time
描述了CPU花費在處理re-nicing進程的百分比。
・Context switch
系統中線程之間進行交換的數量。
・Waiting
CPU花費在等待I/O操作上的總時間,與blocked相似,一個系統不應該花費太多的時間在等待I/O操作上,否則你應該進一步檢測I/O子系統是否存在瓶頸。
・Interrupts
Interrupts 值包括硬Interrupts和軟Interrupts,硬Interrupts會對系統性能帶來更多的不利影響。高的Interrupts值指出系統可能存在一個軟體的瓶頸,可能是內核或者驅動程序。注意Interrupts值中包括CPU時鍾導致的中斷(現代的xServer系統每秒1000個 Interrupts值)。
(2)內存參數
引用
・Free memory
相比其他操作系統,Linux空閑內存的值不應該做為一個性能參考的重要指標,因為就像我們之前提到過的,Linux內核會分配大量沒有被使用的內存作為文件系統的緩存,所以這個值通常都比較小。
・Swap usage
這 個值描述了已經被使用的swap空間。Swap usage只表示了Linux管理內存的有效性。對識別內存瓶頸來說,Swap In/Out才是一個比較又意義的依據,如果Swap In/Out的值長期保持在每秒200到300個頁面通常就表示系統可能存在內存的瓶頸。
・Buffer and cache
這個值描述了為文件系統和塊設備分配的緩存。在Red Flag DC Server 5版本中,你可以通過修改/proc/sys/vm中的page_cache_tuning來調整空閑內存中作為緩存的數量。
・Slabs
描述了內核使用的內存空間,注意內核的頁面是不能被交換到磁碟上的。
・Active versus inactive memory
提供了關於系統內存的active內存信息,Inactive內存是被kswapd守護進程交換到磁碟上的空間。
(3)網路參數
引用
・Packets received and sent
這個參數表示了一個指定網卡接收和發送的數據包的數量。
・Bytes received and sent
這個參數表示了一個指定網卡接收和發送的數據包的位元組數。
・Collisions per second
這個值提供了發生在指定網卡上的網路沖突的數量。持續的出現這個值代表在網路架構上出現了瓶頸,而不是在伺服器端出現的問題。在正常配置的網路中沖突是非常少見的,除非用戶的網路環境都是由hub組成。
・Packets dropped
這個值表示了被內核丟掉的數據包數量,可能是因為防火牆或者是網路緩存的缺乏。
・Overruns
Overruns表達了超出網路介面緩存的次數,這個參數應該和packets dropped值聯繫到一起來判斷是否存在在網路緩存或者網路隊列過長方面的瓶頸。
・Errors 這個值記錄了標志為失敗的幀的數量。這個可能由錯誤的網路配置或者部分網線損壞導致,在銅口千兆乙太網環境中部分網線的損害是影響性能的一個重要因素。
(4)塊設備參數
引用
・Iowait
CPU等待I/O操作所花費的時間。這個值持續很高通常可能是I/O瓶頸所導致的。
・Average queue length
I/O請求的數量,通常一個磁碟隊列值為2到3為最佳情況,更高的值說明系統可能存在I/O瓶頸。
・Average wait
響應一個I/O操作的平均時間。Average wait包括實際I/O操作的時間和在I/O隊列里等待的時間。
・Transfers per second
描述每秒執行多少次I/O操作(包括讀和寫)。Transfers per second的值與kBytes per second結合起來可以幫助你估計系統的平均傳輸塊大小,這個傳輸塊大小通常和磁碟子系統的條帶化大小相符合可以獲得最好的性能。
・Blocks read/write per second
這個值表達了每秒讀寫的blocks數量,在2.6內核中blocks是1024bytes,在早些的內核版本中blocks可以是不同的大小,從512bytes到4kb。
・Kilobytes per second read/write
按照kb為單位表示讀寫塊設備的實際數據的數量。

9、Linux伺服器硬碟優化實用技巧,怎樣優化 伺服器

在Windows系統中,磁碟碎片是一個常見的問題,如果不注意,系統性能可能被侵蝕。Linux使用第二擴展文件系統(ext2),它以一種完全不同的方式處理文件存儲。Linux沒有Windows系統中發現的那種問題,這使得許多人認為磁碟碎片化根本不是一個問題。但是,這是不正確的。

所有的文件系統隨著時間的推移都趨向於碎片化。Linux文件系統減少了碎片化,但是並沒有消除。由於它不經常出現,所以對於一個單用戶的工作站來說,可能根本不是問題。然而在繁忙的伺服器中,隨著時間的過去,文件碎片化將降低硬碟性能,硬碟性能只有從硬碟讀出或寫入數據時才能注意到。下面是優化Linux系統硬碟性能的一些具體措施。

一、清理磁碟

這種方法看上去很簡單:清理磁碟驅動器,刪除不需要的文件,清除所有需要被保存但將不被使用的文件。如果可能的話,清除多餘的目錄,並減少子目錄的數目。這些建議似乎顯而易見,但是你會驚訝地發現,每個磁碟上確實積累了非常多的垃圾。釋放磁碟空間可以幫助系統更好地工作。

二、整理磁碟碎片

Linux系統上的磁碟碎片整理程序與Windows 98或Windows NT系統中的磁碟碎片整理程序不同。Windows 98引入FAT 32文件系統,雖然運行Windows 98不必轉換為FAT 32文件系統。Windows可以被設置為使用FAT或一個叫NTFS的增強文件系統。所有這些文件系統以本質上相同的方式處理文件存儲。

Linux最好的整理磁碟碎片的方法是做一個完全的備份,重新格式化分區,然後從備份恢復文件。當文件被存儲時,它們將被寫到連續的塊中,它們不會碎片化。這是一個大工作,可能對於像/usr之類不經常改變的程序分區是不必要的,但是它可以在一個多用戶系統的/home分區產生奇跡。它所花費的時間與Windows NT伺服器磁碟碎片整理花費的時間大致上相同。

如果硬碟性能仍不令人滿意,還有許多其它的步驟可以考慮,但是任何包含升級或購買新設備的硬體解決方案可能會是昂貴的。

三、從IDE升級到SCSI

如果你的硬碟是一個IDE驅動器,可以通過升級到SCSI驅動器獲得更好的整體性能。因為IDE控制器必須訪問CPU,CPU和磁碟密集型操作可能變得非常緩慢。SCSI控制器不用通過CPU處理讀寫。當IDE驅動器在讀或寫時,用戶可能會因為CPU周期被IDE驅動器佔用而抱怨系統的緩慢。

獲取更快的控制器和磁碟驅動器

標準的SCSI控制器不能比標準的IDE控制器更快地讀寫數據,但是一些非常快的「UltraWide」SCSI控制器能夠使讀寫速度有一個真正的飛躍。

EIDE和UDMA控制器是非常快的IDE控制器。新的UDMA控制器能夠接近SCSI控制器的速度。UDMA控制器的頂級速度是猝發速度,但持續傳輸的速度明顯慢得多。IDE控制器包括UDMA,是嵌入在驅動器本身中的。不需要購買一個控制器,只要購買一個驅動器,它就包含了控制器,可以獲得UDMA性能。

磁碟驅動器經常忽視的一個方面是磁碟本身的速度。磁碟的速度以rpm為單位給出,它代表每分鍾旋轉多少次。rpm越大,磁碟速度也越快。如果你有這方面的預算,大多數伺服器系統廠商可提供7500rpm甚至10000rpm SCSI磁碟。標准SCSI和IDE磁碟提供5400rpm速度。

四、使用多個控制器

IDE和SCSI磁碟可以被鏈接。IDE鏈最多包括兩個設備,標准SCSI鏈最多包括七個設備。如果在系統中有兩個或更多SCSI磁碟,很可能被鏈接到同一個控制器。這樣對大多數操作是足夠的,尤其是把計算機當作單用戶的工作站時。但是如果有一個伺服器,那麼就能夠通過對每個SCSI驅動器提供一個控制器改善性能。當然,好的控制器是昂貴的。

五、調整硬碟參數

使用hdparm工具可以調整IDE硬碟性能,它設計時專門考慮了使用UDMA驅動器。在預設情況下,Linux使用是最安全的,但是設置訪問IDE驅動器是最慢的。預設模式沒有利用UDMA可能的最快的性能。

使用hdparm工具,通過激活下面的特性可以顯著地改善性能:

◆ 32位支持 預設設置是16位;

◆ 多部分訪問 預設設置是每次中斷單部分傳送。

注意:在使用hdparm之前,確保對系統已經做了完全的備份。使用hdparm改變IDE參數,如果出錯可能會引起驅動器上全部數據的丟失。

hdparm可以提供關於硬碟的大量信息。打開一個終端窗口,輸入下面命令獲取系統中第一個IDE驅動器的信息(改變設備名獲取其它IDE驅動器的信息):

hdparm -v /dev/had

上面命令顯示出當系統啟動時從驅動器獲得的信息,包括驅動器操作在16位或32位模式(I/O Support)下,是否為多部分訪問(Multcount)。關於磁碟驅動器的更詳細信息的顯示可使用-i參數。

Hdparm也可以測試驅動器傳輸速率。輸入命令測試系統中第一個IDE驅動器:

hdparm -Tt /dev/hda

此測試可測量驅動器直接讀和高速緩沖存儲器讀的速度。結果是一個優化的「最好的事例」數字。改變驅動器設置,激活32位傳輸
六、使用軟體RAID

RAID廉價驅動器的冗餘陣列,也可以改善磁碟驅動器性能和容量。Linux支持軟體RAID和硬體RAID。軟體RAID嵌入在Linux 內核中,比硬體RAID花費要少得多。軟體RAID的惟一花費就是購買系統中的磁碟,但是軟體RAID不能使硬體RAID的性能增強。硬體RAID使用特殊設計的硬體,控制系統的多個磁碟。硬體RAID可能是昂貴的,但是得到的性能改善與之相匹配。RAID的基本思想是組合多個小的、廉價的磁碟驅動器成為一個磁碟驅動器陣列,提供與大型計算機中單個大驅動器相同的性能級別。RAID驅動器陣列對於計算機來說像單獨一個驅動器,它也可以使用並行處理。磁碟讀寫在RAID磁碟陣列的並行數據通路上同時進行。

IBM公司在加利福尼亞大學發起一項研究,得到RAID級別的一個最初定義。現在有六個已定義的RAID級別,如下所示。

RAID 0:級別0隻是數據帶。在級別0中,數據被拆分到多於一個的驅動器,結果是更高的數據吞吐量。這是RAID的最快和最有效形式。但是,在這個級別沒有數據鏡像,所以在陣列中任何磁碟的失敗將引起所有數據的丟失。

RAID 1:級別1是完全磁碟鏡像。在獨立的磁碟上創建和支持數據兩份拷貝。級別1陣列與一個驅動器相比讀速度快、寫速度慢,但是如果任一個驅動器錯誤,不會有數據丟失。這是最昂貴的RAID級別,因為每個磁碟需要第二個磁碟做它的鏡像。這個級別提供最好的數據安全。

RAID 2:級別2設想用於沒有內嵌錯誤檢測的驅動器。因為所有的SCSI驅動器支持內嵌錯誤檢測,這個級別已過時,基本上沒用了。Linux不使用這個級別。

RAID 3:級別3是一個有奇偶校驗磁碟的磁碟帶。存儲奇偶校驗信息到一個獨立的驅動器上,允許恢復任何單個驅動器上的錯誤。Linux不支持這個級別。

RAID 4:級別4是擁有一個奇偶校驗磁碟的大塊帶。奇偶校驗信息意味著任何一個磁碟失敗數據可以被恢復。級別4陣列的讀性能非常好,寫速度比較慢,因為奇偶校驗數據必須每次更新。

RAID 5:級別5與級別4相似,但是它將奇偶校驗信息分布到多個驅動器中。這樣提高了磁碟寫速度。它每兆位元組的花費與級別4相同,提高了高水平數據保護下的高速隨機性能,是使用最廣泛的RAID系統。

軟體RAID是級別0,它使多個硬碟看起來像一個磁碟,但是速度比任何單個磁碟快得多,因為驅動器被並行訪問。軟體RAID可以用IDE或SCSI控制器,也可以使用任何磁碟組合。

七、配置內核參數

通過調整系統內核參數改善性能有時是很明顯的。如果你決定要這樣做一定要小心,因為系統內核的改變可能優化系統,也可能引起系統崩潰。

注意:不要在一個正在使用的系統上改變內核參數,因為有系統崩潰的危險。因此,必須在一個沒有人使用的系統上進行測試。設置一個測試機器,對系統進行測試,確保所有工作正常。

Tweak內存性能

在Linux中,可以Tweak系統內存。如果遇到內存不足錯誤或者系統是用於網路的,可以調整內存分配設置。
內存一般以每頁4千位元組分配。調整「空白頁」設置,可以在性能上有顯著的改善。打開終端窗口,輸入下面的命令查看系統的當前設置:

cat /proc/sys/vm/freepages

這樣將獲得三個數字,就像下面這樣:

128 256 384

這些是最小空白頁、空白頁低和空白頁高設置。這些值在啟動時決定。最小設置是系統中內存數量的兩倍;低設置是內存數量的4倍;高設置是系統內存的6倍;自由內存不能小於最小空白頁數。

如果空白頁數目低於空白頁高設置,則交換(使用磁碟空間分配到交換文件)開始。當達到空白頁低設置時,密集型交換開始。

增加空白頁高設置有時可以改善整體性能,比如試試增加高設置到1MB,用echo命令可以調整這個設置。使用樣本設置,輸入這個命令增加空白頁高設置到1MB:
注意:當系統還沒有被使用時測試這個設置,以確保在做任何調整時監視系統性能。這樣可以確定哪個設置對系統是最好的。

10、為什麼優化linux網路性能

linux系統性能怎麼優化
一、前提
我們可以在文章的開始就列出一個列表,列出可能影響Linux操作系統性能的一些調優參數,但這樣做其實並沒有什麼價值。因為性能調優是一個非常困難的任務,它要求對硬體、操作系統、和應用都有著相當深入的了解。如果性能調優非常簡單的話,那些我們要列出的調優參數早就寫入硬體的微碼或者操作系統中了,我們就沒有必要再繼續讀這篇文章了。正如下圖所示,伺服器的性能受到很多因素的影響。
當面對一個使用單獨IDE硬碟的,有20000用戶的資料庫伺服器時,即使我們使用數周時間去調整I/O子系統也是徒勞無功的,通常一個新的驅動或者應用程序的一個更新(如SQL優化)卻可以使這個伺服器的性能得到明顯的提升。正如我們前面提到的,不要忘記系統的性能是受多方面因素影響的。理解操作系統管理系統資源的方法將幫助我們在面對問題時更好的判斷應該對哪個子系統進行調整。
二、Linux的CPU調度
任何計算機的基本功能都十分簡單,那就是計算。為了實現計算的功能就必須有一個方法去管理計算資源、處理器和計算任務(也被叫做線程或者進程)。非常感謝Ingo Molnar,他為Linux內核帶來了O(1)CPU調度器,區別於舊有的O(n)調度器,新的調度器是動態的,可以支持負載均衡,並以恆定的速度進行操作。
新調度器的可擴展性非常好,無論進程數量或者處理器數量,並且調度器本身的系統開銷更少。新調取器的演算法使用兩個優先順序隊列。

與linux網站伺服器優化相關的知識