當前位置:首頁 » 操作系統 » linux內核參數優化

linux內核參數優化

發布時間: 2022-12-20 18:30:49

linux內核參數之nf_conntrack

近日線下測試環境的一個cloudstack計算節點上的虛擬機出現頻繁的丟包情況,經過排查日誌發現這個計算節點的包被丟棄,日誌信息如下:

查詢這個錯誤是因為連接數過高引起的,可以調整nf_conntrack內核參數進行解決。

既然找到了原因,那麼我們可以查看並且優化相關參數,默認的net.netfilter.nf_conntrack_max是65536,果然我們機器是默認值。

那麼這個值設置多少合理呢?我在網上找到一個計算公式,我們伺服器是512G內存64位系統,計算格式如下:

優化內核參數。

nf_conntrack還有些相關的參數可以進行優化,這些參數我們在之前已經做過優化了,如下:

㈡ linux性能調優都有哪幾種方法

1、為磁碟I/O調整Linux內核電梯演算法
在選擇文件系統後,有一些內核和掛載選項可能會影響到它的性能表現,其中一個內核設置是電梯演算法,通過此演算法,系統可以平衡低延遲需求,收集足夠的數據,從而有效地組織對磁碟的讀和寫請求。
2、禁用不必要的守護進程
伺服器上有很多守護進程或服務不是必需的,這些服務不但沒有發揮作用,還消耗了一定的內存和CPU,因此,需要將它們從伺服器移除,這一步最大的好處就是可以加快啟動時間,釋放內存。
3、關掉GUI
一般來說,Linux伺服器是不需要GUI的,所以管理任務都可以在命令行下完成,因此最好關掉GUI。
4、清理不需要的模塊或功能
在伺服器軟體包中有太多被啟動的功能或模塊實際上是不需要的,仔細看看Apache配置文件,確定FrontPage支持或其它額外的模塊是否真的要用到,如果不需要,應該毫不猶豫地從伺服器禁用掉,這樣有助於提高系統內存可用量,騰出更多資源給那些真正需要的軟體,讓它們運行得更快。
5、禁用控制面板
在Linux中,有許多流行的控制面板,如Cpanel,Plesk,Webmin和phpMyAdmin等,但是,禁用掉這些軟體包可以釋放出大約120MB內存,它們可以通過PHP腳本(盡管有些不安全),或命令行命令啟用,這樣做後,內存使用量大約可以下降30-40%。
6、改善Linux Exim伺服器性能
7、使用AES256增強gpg文件加密安全
為了提高備份文件或敏感信息的安全,許多Linux系統管理員都會使用gpg進行加密,它是一個開放的加密演算法,沒有什麼比它更安全的了。
8、遠程備份服務安全
安全是選擇遠程備份服務最重要的因素,大多數系統管理員都害怕兩件事:(黑客)可以刪除備份文件,不能從備份恢復系統。為了保證備份文件100%的安全,備份服務公司提供遠程備份伺服器,使用scp腳本或RSYNC通過SSH傳輸數據,這樣,沒有人可以直接進入和訪問遠程系統,因此,也沒有人可以從備份服務刪除數據。在選擇遠程備份服務提供商時,最好從多個方面了解其服務強壯性,如果可以,可以親自測試一下。

㈢ 如何才能學好linux


來自網路經驗針對如何才能學好linux的網路資料


目前比較學習Linux系統比較火的論壇


談談如何學習Linux操作系統,來自51cto網路資料,參考資料http://ixdba.blog.51cto.com/2895551/569329

真正想學好linux系統,還是要研究linux內核源碼

為什麼這么說呢?

無論是使用linux裡面的一些命令,還是做linux應用層的開發,其實都是在使用linux內核的功能,但是其實你對linux底層的機制並不了解。長遠來看,其實對你技術的提升不大。

比如:

1. 你天天使用linux里的docker命令,那你知道docker是如何做到這種隔離性的嗎?

2. 你寫linux應用程序,會看到入口是main()函數。那麼,問題來了,為什麼是main()呢?為什麼不是hello()、不是fuck(),不是love()呢?

3. 你寫linux應用程序,也會用write()函數。這個write函數,我們代碼里並沒有實現它,那是誰實現了它?是c庫嗎?有可能。但是如果我是寫磁碟呢?c庫能做到嗎?

顯然不能!還是需要linux內核的功能。

4. 我們知道,在linux里,不同的應用程序可以共享一個動態鏈接庫,這又是怎麼做到的?不是說進程是隔離的嗎?為什麼對動態鏈接庫就不做隔離了?

5. linux應用層調用malloc是直接調用到內核嗎?

很顯然不是! c庫里也有內存管理,c庫里的內存管理單元會向內核批發內存(以page為單位),然後向應用程序零售內存(更小的粒度,可以是int大小,char大小等)

6. linux里進程和線程的共同點和差別究竟是什麼?不要拿教科書里那一套來說教,從代碼里得到的才是真知。

....

問題太多了,難道你不好奇嗎?

如果你不好奇,那很顯然你不太適合做技術,在技術這條路上可能走不遠,應該早日轉行;如果你很好奇,那就從現在開始,研究linux內核吧。



對於這個問題作為一個在linux下開發代碼十幾年的人,忍不住說幾句

任何一門技能的學習,想要學精學透,都要付出巨大的努力,尤其是一些專業性比較強的技能,更需要持之以恆長期不斷的投入大量的精力去學習和實踐,比如linux的學習,就是一門專業性非常強的技能,如何能學好這項技能。

如何才能學好那?

思想上的重視

首先要明白自己為什麼要學習linux,學習linux能給自己帶來什麼,也就是說要知道學好linux對自己的重要性。當從思想上認識到一件事對自己的重要性有多大的時候,就會投入多大的精力去做這件事。

行動上的具體

有了思想上的重視,下面就需要具體的行動

(1)從基礎知識學習,打好基本功;任何一門新知識的學習,都要了解它的一些基本內容,基本概念等等,這樣就需要找一本介紹linux的專業書籍,先大致了解一下linux的相關內容,不至於後期學習linux的時候,連一些最基本的專業名稱都搞不懂。

(2)勤學多練,多多思考;linux是一門實用性非常強的技術,基礎理論的學習就是為了應用的更好實現,應用的實現反過來也會使理論的知識更加鞏固;找一套功能比較齊全的開發板,在開發板上實現各種功能,不斷地去實踐,帶著問題去尋找答案,當看著自己設計的功能在開發板上實現,會樂此不彼。


總之,學好 Linux 絕非一朝一夕之事,時間、知識的積累是必不可少的

Linux是一個很大的概念,建議先從簡單的入手,結合你的興趣、工作內容,在某一方面深挖,來張圖介紹Linux的學習升級。

初學入門Linux的話,可以先安裝一個桌面版的Linux虛擬機(Ubuntu、CentOS7等都行),以熟悉常用命令為主,待基本掌握環境後,可以研究一下 內核源碼 及 常用伺服器的搭建,加深理解和應用,下面我簡單介紹一下Linux的學習過程,感興趣的朋友可以嘗試一下:

01 安裝Linux

這里建議安裝一個桌面版的Linux虛擬機(Ubuntu、CentOS7等發行版本都行),初學入門的話,如果對Linux完全不熟悉,安裝迷你版會非常不適應,許多功能和包都需要自己適配下載,可以先使用桌面版,不至於完全手足無措,後期熟悉環境後,可以使用無界面版,操作起來也會非常容易:

02 入門Linux

Linux虛擬機安裝好後,就是Linux基礎入門,這里網上教程和資料非常多,像慕課網、菜鳥教程、B站等都有大量優質視頻和文檔,當然,你也可以找一本專業的Linux書籍,一邊學習一邊練習,《 鳥哥的私房菜 》就非常不錯,覆蓋面比較廣,講解的也非常細致,常見的基礎命令和配置等都要熟悉掌握,這些是使用Linux的基礎:

03 深入Linux

Linux基礎熟悉後,就是深入Linux的過程,這里可以學習和研究的東西就非常多了,基礎的Linux應用,包括伺服器搭建、嵌入式開發等,都有非常光明的前景,當然,你也可以研究一下Linux內核,包括內存管理、進程管理、文件系統、驅動等,對於深入理解操作系統來說,可以說是大有裨益:

Linux畢竟只是個操作系統,只要掌握了正確的學習方法,不會有多難。今天咱們就好好看看,Linux到底怎麼學才是正確的學習方法。轉自——馬哥linux運維

一、從命令開始從基礎開始

常常有些朋友一接觸Linux 就是希望構架網站,根本沒有想到要先了解一下Linux 的基礎。這是相當困難的。雖然Linux桌面應用發展很快,但是命令在Linux中依然有很強的生命力。Linux是一個命令行組成的操作系統,精髓在命令行,無論圖形界面發展到什麼水平這個原理是不會變的,Linux命令有許多強大的功能:從簡單的磁碟操作、文件存取、到進行復雜的多媒體圖象和流媒體文件的製作。這里筆者把它們中比較重要的和使用頻率最多的命令,按照它們在系統中的作用分成幾個部分介紹給大家,通過這些基礎命令的學習我們可以進一步理解 Linux系統:

安裝和登錄命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh

文件處理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln

系統管理相關命令: df、 top、 free、 quota 、at、 lp、 adser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last

網路操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup

系統安全相關命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswho

二、選擇一本好的Linux書籍

在各個Linux論壇中,我們看到最多的問題往往是某個新手,在安裝或使用linux的過程中遇到一個具體的問題就開始提問,很多都是重復性的問題,甚至有不少人連基本的問題描述都不是很清楚。這說明很多初學linux的人還沒有掌握基本功。怎樣才能快速提高掌握linux的基本功呢? 最有效的方法莫過於學習權威的linux工具書,工具書對於學習者而言是相當重要的。一本錯誤觀念的工具書卻會讓新手整個誤入歧途。目前國內關於 linux的書籍有很多不過精品的不多,筆者強烈建議閱讀《鳥哥的Linux私房菜 基礎篇》,現在出到了第三版。新手最好能夠買一本紙版書來仔細研讀,並認真做好學習筆記。當然,如果習慣看電子書,也可以從這里 下載 PDF電子書。

三 、養成在命令行下工作的習慣

一定要養成在命令行下工作的習慣,要知道X-window只是運行在命令行模式下的一個應用程序。在命令行下學習雖然一開始進度較慢,但是熟悉後,您未來的學習之路將是以指數增加的方式增長的。從網管員來說,命令行實際上就是規則,它總是有效的,同時也是靈活的。即使是通過一條緩慢的數據機線路,它也能操縱幾千公里以外地遠程系統。

四、用Unix思維思考Linux

由於Linux是參照Unix的思想來設計的,理解和掌握它就必須以Unix的思維來進行,而不能以Windows思維。不可否認,windows 在市場上的成功很大一部分在於技術思想的獨到之處。可是這個創新是在面對個人用戶的前提下進行的,而面對著企業級的服務應用,它還是有些力不從心。多年來在計算機操作系統領域一直是二者獨大:unix在伺服器領域,Windows在個人用戶領域。由此可見,用戶需求決定了所採用的操作系統。不管什麼原因,如果要學習Linux,那麼首先要將思維從Windows的「這個小河」 中拖出來,放入Unix的海洋。

五、學習shell

對於Shell(中文名稱殼),習慣Windows的讀者肯定是非常陌生的,因為Windows只有一個「Shell」(如果可以說是Shell的話),那就是Windows自己。用一句話容易理解的解釋就是,shell是用戶輸入命令與系統解釋命令之間的中介。最直觀的說法,一種Shell有一套自己的命令。舉一個容易理解的例子,Linux的標准Shel是Bash Shel;Solaris的shell是B shell;Linux的Shell是以命令行的方式表現出來的。讀者可能會不理解,Windows從命令行「進化」到了圖形界面,那麼Linux現在還使用命令行豈不是一種倒退?

當初我剛剛接觸Linux時就曾有過這種想法。可是後來發現,如果使用圖形界面,那麼分配給應用軟體的資源就少了,在價格昂貴的伺服器上,能夠以較低的硬體配置實現同樣的功能是非常重要的。

下面舉例說明,一台伺服器有1GB內存,假設其中512MB用於處理圖形界面,若要安裝一個需要784MB內存的資料庫軟體,惟一的辦法就是擴大內存。但是如果使用命令行,系統可能只需要64MB內存,其它的內存就可以供資料庫軟體使用了。使用命令行,不僅是內存,而且CPU及硬碟等資源的佔用都要節省很多。所以,作為伺服器使用命令行是優點而不是缺點。既然Shell有這么多優點,就必須要學習它。

簡單來說就是:興趣,堅持,方法。

興趣第一

對於任何事情,興趣在很大程度上會影響你做這件事的結果。去做一件自己很感興趣的事情,和做一件自己本來毫無興趣卻由於某種原因而不得不做的事情,其結果往往是天地之別。究其緣由,無非是對於自己感興趣的事情,是以一種享受其中樂趣的心態去做,在不自覺中就會投入更多的心思在上面,也會更加專注,更容易一直堅持下去。而對於毫無興趣的事情,往往是迫於某種壓力才不得不做,心裡或多或少會有一定排斥拒絕,甚至會有煎熬的感覺,其結果也可想而知。

對於程序開發,也是一樣的。工作中,同樣是程序員,卻經常會有兩種不同的人。一種對程序開發真的是很感興趣,一天不寫代碼不看代碼就如坐針氈,感覺這一天總缺少點什麼,往往這種人才能成為技術人口中的大神。另外一種人,則是相反,看代碼寫代碼完全是因為完成任務而不得不做,處理問題時能靠嘴忽悠過去的,絕不會看一眼代碼,所以這種人往往技術平庸。當然,這只是從技術角度說,如果單純看收入的話,第一種人卻不見得比第二種人收入高。

所以,首先要確定自己是否對程序開發感興趣,如果沒有興趣,那就自然不必繼續下去了,完全可以換一個職業選擇。然後再選擇一個自己最感興趣的方向,如內核開發,驅動開發,應用開發等等,選定方向後由淺入深,循序漸進。

持之以恆

在互聯網迅猛發展的今天,我們處在一個知識迅速爆發和更新更新時代,每一天都有各種各樣的新事物層出不窮,當然也會伴隨著各種老的舊的東西消失。計算機技術更是如此,從編程語言到開發工具,從設計模式到系統框架,每一天每個領域都會有新的技術出現,從也會有舊的技術被淘汰被丟棄被遺忘。

這就意味著,從成為程序員的那一天開始,就不可能停止學習的腳步,不得不面對各種技術的更新換代,因此,必須要持續學習,及時更新自己的知識結構,以適應各種業務需求的變化,否則,可能就不得不面對被淘汰的結果。

找到適合自己的學習方法

就像看電影一樣,同一部電影,有的人覺得精彩,有的人覺得無趣。每個人的習慣、個性、思維、背景、基礎不同,學習的方法也不同,沒有什麼放之皆準的方法,適合自己的才是最好的。

對於入門,找到一本自己能看得懂適合自己的書。很多別人推薦的堪稱聖經的經典書籍,不妨嘗試一下,看自己是否能夠很容易的理解和消化。如果實在看不懂,果斷換一本,切忌過於勉強。剛入門時,如果長時間處於一種雲里霧里的感覺,往往會對自己信心造成打擊,繼而一點點消耗掉繼續學下去的興趣。很多聖經級的書籍往往適合在有一定基礎之後再細細品讀的,卻並非入門首選。

入門之後就是逐步深入了。一般來說,在實際項目中進行學習是效果最好的。做項目過程中往往能夠鞏固已經學到的技能,同時發現自己的知識盲點,進而消滅盲點。

此外,多讀代碼,多寫代碼。

最後的最後, 珍惜你現在的每一根頭發。

linux系列有兩種發行版本

1).Red

Hat系,包括RHEL、fedora、centos等

2).Debian系,包括Debian、Ubuntu、Mint等

想要學習的話如果個人學習,推薦使用Ubuntu。如果是工作的話,則使用centos學習

1.學習Linux,首先就是安裝Linux系統,通過鏡像安裝,這個過程可以先大概的了解一下linux的啟動過程,對一些概念有個大致的印象

2.在安裝好的系統之上,學習一些基本命令的操作,比如ls . 列出當前文件夾下的子文件和子目錄,cd /root 切換到root的目錄下,top命令查看一些進程的cpu,內存等資源的使用情況,ps命令同樣也可以查看進程的內存等資源使用情況,pwd查看當前所在的路徑等等,將這一些命令熟練的掌握

3.在掌握了linux的一些基本命令之後,那麼可以進行一些服務的安裝搭建練習,比如在Linux下安裝搭建DNS伺服器,搭建nginx伺服器等等

4.進階階段的話,可以嘗試進行內核參數的調優,比如tcp關閉連接之後保持高速通道,擴大linux系統的最大句柄打開數之類的內核參數的優化,sysctl -a可以查看目前已經載入的內核參數

5.學會了造句子,那麼之後就可以寫作文了。同理學會了linux的命令之後,那麼可以學習一下shell的基本語句,awk sed的學習,用shell實現一些特定功能的腳本,比如可以通過cat /proc/cpuinfo加上awk命令來實現對cpu相關信息的統計等

如果你在Linux上是一個小白請看下面的回答~


想學好Linux,先問自己幾個問題。

1. 你對計算機感興趣嗎?

2. 為什麼學習Linux(他能給你帶來什麼價值,這個價值點是否可以支持你一直堅持下去)

3.你每天可以在工作生活之餘或者大學課余抽出多少時間去學習(任何的技能都是需要時間去練習+時間才能掌握的)

如果這三個問題的答案都是肯定的,那麼請看下文:

我也是一個從0技術基礎的小白開始學習的

推薦你一個教程:【菜鳥教程】

http://www.runoob.com/linux/linux-tutorial.html

一定要有耐心、有恆心的堅持學完,這樣你對Linux才能有一定的理解

學習的中間需要您自己不斷的實操,自己去敲命令,去安裝,去驗證

㈣ Linux操作系統的知識點總結

Linux操作系統的基礎知識並不是很難理解,熟悉掌握基礎知識能更好的學習Linux。下面由我為大家整理了Linux操作系統的知識點總結的相關知識,希望對大家有幫助!

Linux操作系統的知識點總結1.操作系統總體介紹

•CPU: 就像人的大腦,主要負責相關事情的判斷以及實際處理的機制。

查詢指令: cat /proc/cpuinfo

•內存: 大腦中的記憶區塊,將皮膚、眼睛等所收集到的信息記錄起來的地方,以供CPU進行判斷。查詢指令: cat /proc/meminfo

物理內存

物理內存,就是我們將內存條插在主板內存槽上的內存條的容量的大小。看計算機配置的時候,主要看的就是這個物理內存

虛擬內存

Windows中運用了虛擬內存技術,即拿出一部分硬碟空間來充當內存使用,當內存佔用完時,電腦就會自動調用硬碟來充當內存,以緩解內存的緊張。

關系:windows中虛擬內存和物理內存可能都會被使用,Linux中,只有物理內存使用完了,才會使用虛擬內存

•硬碟: 大腦中的記憶區塊,將重要的數據記錄起來,以便未來再次使用這些數據。

查詢指令: fdisk -l (需要root許可權)

Linux操作系統的知識點總結2.內存和硬碟的關系

具體命令後面會介紹

Linux操作系統的知識點總結3.操作系統監控命令>單獨寫一份

•vmstat

•sar

•iostat

•top

•free

•uptime

•netstat

•ps

•strace

•lsof

Linux操作系統的知識點總結4.如何分析操作系統

實際流程: 讀數據》數據>硬碟》虛擬內存(swaP)》內存》cpu緩存》執行隊列

分析方向,正好相反

Linux操作系統的知識點總結4.各個部分常出現的漏洞

•CPU: 容易出現該類瓶頸的郵件伺服器、動態web伺服器

•內存: 容易出現該類瓶頸的列印伺服器、資料庫伺服器、靜態web伺服器

•磁碟I/O: 頻繁讀寫操作的項目

•網路帶寬: 頻繁大量上傳下載項目

Linux操作系統的知識點總結5.linux本身的一些優化

1. 系統安裝優化

當安裝linux系統時,磁碟劃分、 SWAP內存的分配都直接影響系統性能。對於虛擬內存SWAP的設定,現在已經沒有了所謂虛擬內存是物理內存兩倍的要求,但是根據經驗,如果內存較小(物理內存小於4GB),一般設置SWAP交換分區大小為內存的2倍;如果物理內存大約4GB小於16GB,可以設置SWAP大小等於或者略小於物理內存即可;如果內存在16GB以上,原則上可以設置SWAP為0,但最好設置一定大小的SWAP

• 2. 內核參數優化

例如,如果系統部署的Oracle資料庫應用,那麼就需要對系統共享內存段( kernel.shmmax, kenerl.shmmni, kernel.shmall)、

系統信號量( kernel.sem)、文件句柄( fs.file0max)等參數進行優化設置;如果部署的WEB應用,那麼就需要根據web應用特性進行網路參數的優化,例如修改net.ipv4.ip_local_port_range、net.ipv4.tc_tw_reuse、 net.core.somaxconn等網路

內核參數

• 3. 文件系統優化

在linux下可選的文件系統有ext2,、 ext3、 xfs、 ReiserFS

linux標准文件系統是從VFS開始,然後ext、 ext2, ext2是linux上的標准文件系統, ext3是在ext2基礎上增加日誌形成的。從VFS到ext3,設計思想沒有太大變化,都是早期UNIX家族基於超級塊和inode的設計理念設計而成。XFS文件系統是SGI開發的一個高級日誌文件系統,通過分布處理磁碟請求、定位數據、保持cache的一致性來提供對文件系統數據的低延遲、高帶寬的訪問,因此XFS極具伸縮性,非常健壯,具有優秀的日誌記錄功能、可擴展性強、快速寫入等優點。ReiserFS在Hans Reiser領導下開發出來的一款高性能的日誌文件系統,通過完全平衡樹來管理數據,包括文件數據、文件名及日誌支持等。與ext2、 ext3相比,最大的優點是訪問性能和安全性大幅提升。具有高效、合理利用磁碟空間,先將的日誌管理機制,特意的搜尋方式,海量磁碟存儲等優點

Linux操作系統的知識點總結5.重點知識

物理內存和虛擬內存

1.如何查看物理內存和虛擬內存?

Top 命令可以查看物理內存和虛擬內存的數值

2.Buffer

是硬碟控制器上的一塊內存晶元,具有極快的存取速度,它是硬碟內部存儲和外界介面之間的緩沖器。由於硬碟的內部數據傳輸速度和外界介面傳輸速度不同,緩存在其中起到一個緩沖的作用。緩存的大小與速度是直接關繫到硬碟的傳輸速度的重要因素,能夠大幅度地提高硬碟整體性能。

3.Cache

CPU緩存(Cache Memory)是位於CPU與內存之間的臨時存儲器,它的容量比內存小的多但是交換速度卻比內存要快得多。緩存的出現主要是為了解決CPU運算速度與內存讀寫速度不匹配的矛盾,因為CPU運算速度要比內存讀寫速度快很多,這樣會使CPU花費很長時間等待數據到來或把數據寫入內存。在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就可避開內存直接從緩存中調用,從而加快讀取速度

4.CPU中斷

當CPU執行完一條現行指令時,如果外設向CPU發出中斷請求,那麼CPU在滿足響應的情況下,將發出中斷響應信號,與此同時關閉中斷,表示CPU不在受理另外一個設備的中斷。這時,CPU將尋找中斷請求源是哪一個設備,並保存CPU自己的程序計數器(PC)的內容。然後,他將轉移到處理該中斷源的中斷服務程序。CPU在保存現場信息,設備服務(如交換數據)以後,將恢復現場信息。在這些動作完成以後,開放中斷,並返回到原來被中斷的主程序的下一條指令。

5.上下文切換

上下文切換(Context Switch) 或者環境切換

多任務系統中,上下文切換是指CPU的控制權由運行任務轉移到另外一個就緒任務時所發生的事件。

在操作系統中,CPU切換到另一個進程需要保存當前進程的狀態並恢復另一個進程的狀態:當前運行任務轉為就緒(或者掛起、刪除)狀態,另一個被選定的就緒任務成為當前任務。上下文切換包括保存當前任務的運行環境,恢復將要運行任務的運行環境。

進程上下文用進程的PCB(進程式控制制塊,也稱為PCB,即任務控制塊)表示,它包括進程狀態,CPU寄存器的值等。

通常通過執行一個狀態保存來保存CPU當前狀態,然後執行一個狀態恢復重新開始運行。

上下文切換會對性能造成負面影響。然而,一些上下文切換相對其他切換而言更加昂貴;其中一個更昂貴的上下文切換是跨核上下文切換(Cross-Core Context Switch)。一個線程可以運行在一個專用處理器上,也可以跨處理器。由單個處理器服務的線程都有處理器關聯(Processor Affinity),這樣會更加有效。在另一個處理器內核搶占和調度線程會引起緩存丟失,作為緩存丟失和過度上下文切換的結果要訪問本地內存。總之,這稱為“跨核上下文切換”。

6.進程和線程

進程概念

進程是表示資源分配的基本單位,又是調度運行的基本單位。例如,用戶運行自己的程序,系統就創建一個進程,並為它分配資源,包括各種表格、內存空間、磁碟空間、I/O設備等。然後,把該進程放人進程的就緒隊列。進程調度程序選中它,為它分配CPU以及其它有關資源,該進程才真正運行。所以,進程是系統中的並發執行的單位。

線程概念

線程是進程中執行運算的最小單位,亦即執行處理機調度的基本單位。如果把進程理解為在邏輯上操作系統所完成的任務,那麼線程表示完成該任務的許多可能的子任務之一

進程和線程的關系

(1)一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程。 (2)資源分配給進程,同一進程的所有線程共享該進程的所有資源。

(3)處理機分給線程,即真正在處理機上運行的是線程。

(4)線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。

㈤ 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為單位表示讀寫塊設備的實際數據的數量。

㈥ Nginx 高並發下報錯 connect() failed (110: Connection timed out) while connecting to upstream

背景
在對應用服務進行壓力測試時,Nginx在持續壓測請求1min左右後開始報錯,花了一些時間對報錯的原因進行排查,並最終定位到問題,現將過程總結下。

壓測工具
這里壓測使用的是 siege , 其非常容易指定並發訪問數以及並發時間,以及有非常清晰的結果反饋,成功訪問數,失敗數,吞吐率等性能結果。

壓測指標
單介面壓測,並發100,持續1min。

壓測工具 報錯

Nginx error.log 報錯

排查問題

發現在TCP的連接有兩個異常點

關於這兩點開始進行分析:

TIME-WAIT 定義中分析得知,當壓測工具關閉連接後,實際上Nginx所在機器連接並未立刻CLOSED,而是進入TIME-WAIT狀態,網上可以搜到非常多講解TIME-WAIT過多導致丟包的情況,與我在壓測時所遇到情況一樣。

net.ipv4.tcp_max_tw_buckets = 5000 5000表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並列印警告信息。

優化方案
參照在網上搜索獲取的信息,調整Linux內核參數優化:

參考資料:

㈦ 一般優化linux的內核,需要優化什麼參數

首先要知道一點所有的TCP/IP的參數修改是臨時的,因為它們都位於/PROC/SYS/NET目錄下,如果想使參數長期保存,可以通過編輯/ETC/SYSCTL.CONF文件來實現,這里不做詳細說明,只針對Linux的TCPIP內核參數優化列舉相關參數:

1、為自動調優定義socket使用的內存

2、默認的TCP數據接收窗口大小(位元組)

3、最大的TCP數據接收窗口

4、默認的TCP發送窗口大小

5、最大的TCP數據發送窗口

6、在每個網路介面接收數據包的速率比內核處理這些包速率快時,允許送到隊列的數據包最大數目

7、定義了系統中每一個埠最大的監聽隊列長度

8、探測消息未獲得相應時,重發該消息的間隔時間

9、在認定tcp連接失效之前,最多發送多少個keepalive探測消息等。

㈧ Linux系統優化的12個步驟是什麼

Linux系統優化的12個步驟:

1、登錄系統。

2、禁止SSH遠程。

3、時間同步。

4、配置yum更新源。

5、關閉selinux及iptables。

6、調整文件描述符數量。

7、定時自動清理/var/spool/clientmquene/目錄垃圾文件。

8、精簡開機啟動服務。

9、Linux內核參數優化/etc/sysctl.conf,執行sysct -p生效。

10、更改字元集,防止亂碼問題出現。

11、鎖定關鍵系統文件。

12、清空/etc/issue,去除系統及內核版本登陸前的屏幕顯示。

㈨ linux做過哪些優化

⑴登錄系統:不使用root登錄,通過sudo授權管理,使用普通用戶登錄。
⑵禁止SSH遠程:更改默認的遠程連接SSH服務及禁止root遠程連接。
⑶時間同步:定時自動更新伺服器時間。
⑷配置yum更新源,從國內更新下載安裝rpm包。
⑸關閉selinux及iptables(iptables工作場景如有wan ip,一般要打開,高並發除外)
⑹調整文件描述符數量,進程及文件的打開都會消耗文件描述符。
⑺定時自動清理/var/spool/clientmquene/目錄垃圾文件,防止節點被占滿(c6.4默認沒有sendmail,因此可以不配。)
⑻精簡開機啟動服務(crond、sshd、network、rsyslog)
⑼Linux內核參數優化/etc/sysctl.conf,執行sysct -p生效。
更改字元集,支持中文,但是還是建議使用英文,防止亂碼問題出現。
⑾鎖定關鍵系統文件(chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 處理以上內容後,把chatter改名,就更安全了。)
⑿清空/etc/issue,去除系統及內核版本登陸前的屏幕顯示。

熱點內容
python位元組轉字元串 發布:2025-05-14 07:06:35 瀏覽:420
subplotpython 發布:2025-05-14 06:53:51 瀏覽:661
豎屏大屏導航工廠密碼一般是多少 發布:2025-05-14 06:49:29 瀏覽:806
如何在手機里設置無線網密碼 發布:2025-05-14 06:47:54 瀏覽:120
動態ip文件伺服器 發布:2025-05-14 06:44:22 瀏覽:891
文字分行的腳本有什麼 發布:2025-05-14 06:33:10 瀏覽:288
svn小烏龜怎麼配置 發布:2025-05-14 06:31:43 瀏覽:393
視頻播放器android 發布:2025-05-14 06:31:43 瀏覽:720
android工作室 發布:2025-05-14 06:26:00 瀏覽:658
汽車官方配置表如何下載 發布:2025-05-14 06:21:41 瀏覽:800