導航:首頁 > 操作系統 > linuxcpu優化

linuxcpu優化

發布時間:2022-11-22 12:09:17

『壹』 提高linux腳本cpu和內存使用率

linuxt提供了系統函數sysconf()用來讀取CPU和內存信息,先來了解一下sysconf()函數吧。

頭文件

#include<unistd.h>

函數原型

long sysconf (int name);

說明

sysconf() 返回選項 ( 變數) 的當前值,這個值可配置的但也是受系統限制的。在成功完成的情況下,sysconf() 返回 變數的當前值。該值受到的限制將少於編譯時 <limits.h>, <unistd.h> 或 <time.h> 中可用的對應值。大多數這些 變數的值在調用進程的生存時間內不變。
如果出錯,那麼函數返回 -1 ,並適當地設置 errno 。當沒有錯誤發生時, -1 也是一個合法的返回值。因此,程序要檢查錯誤,應該在調用 sysconf() 之前將 errno 設置為 0 ,然後,如果返回 -1,則檢驗到錯誤。
參數 name 指定我們感興趣的運行時限制的名字,它必須是以值中之一(除非另有說明,否則返回值都是整數):
_SC_2_C_BIND : 一個布爾值,指出是否支持 POSIX C 語言綁定。返回值是 _POSIX2_C_BIND 。
_SC_2_C_DEV : 一個布爾值,指出是否支持 POSIX C 語言開發使用工具選項。返回值是 _POSIX2_C_DEV 。
_SC_2_C_VERSION : 它指出支持哪一個 ISO POSIX.2 標准 (命令) 的版本。返回值是 _POSIX2_C_VERSION 。
_SC_2_CHAR_TERM : 一個布爾值,指出是否至少支持一個 終端。返回值是 _POSIX2_CHAR_TERM 。
_SC_2_FORT_DEV : 一個布爾值,指出是否支持 FORTRAN 開發使用工具選項。返回值是 POSIX2_FORT_DEV 。
注意:1、 CLK_TCK 的值是可變的,因此,不應該假設它是一個 編譯時間 常量。
2、調用 setrlimit 會使 OPEN_MAX 的值發生改變。
3、 通過將 sysconf (_SC_PHYS_PAGES) 和 sysconf (_SC_PAGESIZE) 相乘,來確定 物理內存的總量 (以 位元組為單位) 可以返回一個值,該值超出 32 位進程中 long 或 unsigned long 可表示的最大值。同樣適用於通過將 sysconf (_SC_PAGESIZE) 和 sysconf (_SC_AVPHYS_PAGES) 想乘,來確定未使用的 物理內存的總量 (以 位元組為單位)。這個問題有兩個工作區。第 1 個工作區將程序作為 64 位的進程進行編譯 (從而使 long 足夠大到可以容納乘法運算的結果) ,但是,這樣做的缺點是得到的程序只能在 64 位的內核中運行。第 2 個工作區是用來將得到的乘法運算結果存儲在一個 64 位的量中,如 longlong_t (Solaris OS 類型) 或 long long (linux)。它的有點是可以在 32 位和 64 位的內核中正確工作。

『貳』 deepin linux 做了哪些優化ubuntu12.04開機後內存佔用與CPU佔用均不低,deepin linux 就很小.這是為什麼

內存佔用的原因很多。比如啟動了什麼程序,還有緩存大小。
內存佔用不是問題,只要不用上 SWAP,你就沒有性能損失,而且反而對性能有提升。

至於 CPU 佔用,也要看什麼情況。比如文件系統的 CPU 佔用你是不能直接看到的,ubuntu 的 unity 是 3D 的,這個效果也需要 CPU 佔用的。

沒必要去追求 CPU 和內存的低佔用,Linux 的資源分配和任務調度程序都是針對高負載有優化的,不會對你的日常使用有太大的性能影響。
其實 Windows 也一樣,沒必要追求低佔用,只是 Windows 下面的很多程序開發人員能力不足,而且很多惡意程序太多,所以才需要關注資源佔用,目的是防止這種程序影響操作系統的穩定。Linux 下面這種惡意程序也有,但是你用官方軟體倉庫裡面的軟體,是不用擔心這個問題的。

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

『肆』 如何提高 linux cpu使用率

1.在系統維護的過程中,隨時可能有需要查看CPU使用率,並根據相應信息分析系統狀況的需要。在CentOS中,可以通過top命令來查看CPU使用狀況。運行top命令後,CPU使用狀態會以全屏的方式顯示,並且會處在對話的模式--用基於top的命令,可以控制顯示方式等等。退出top的命令為q(在top運行中敲q鍵一次)。top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器可以直接使用top命令後,查看%MEM的內容。可以選擇按進程查看或者按用戶查看,如想查看oracle用戶的進程內存使用情況的話可以使用如下的命令:$top-uoracle2.釋義:PID:進程的IDUSER:進程所有者PR:進程的優先順序別,越小越優先被執行NInice:值VIRT:進程佔用的虛擬內存RES:進程佔用的物理內存SHR:進程使用的共享內存S:進程的狀態。S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值為負數%CPU:進程佔用CPU的使用率%MEM:進程使用的物理內存和總內存的百分比TIME+:該進程啟動後佔用的總的CPU時間,即佔用CPU使用時間的累加值。COMMAND:進程啟動命令名稱3.操作實例:在命令行中輸入「top」即可啟動toptop的全屏對話模式可分為3部分:系統信息欄、命令輸入欄、進程列表欄。第一部分--最上部的系統信息欄:第一行(top):「00:11:04」為系統當前時刻;「3:35」為系統啟動後到現在的運作時間;「2users」為當前登錄到系統的用戶,更確切的說是登錄到用戶的終端數--同一個用戶同一時間對系統多個終端的連接將被視為多個用戶連接到系統,這里的用戶數也將表現為終端的數目;「loadaverage」為當前系統負載的平均值,後面的三個值分別為1分鍾前、5分鍾前、15分鍾前進程的平均數,一般的可以認為這個數值超過CPU數目時,CPU將比較吃力的負載當前系統所包含的進程;第二行(Tasks):「59total」為當前系統進程總數;「1running」為當前運行中的進程數;「58sleeping」為當前處於等待狀態中的進程數;「0stoped」為被停止的系統進程數;「0zombie」為被復原的進程數;第三行(Cpus):分別表示了CPU當前的使用率;第四行(Mem):分別表示了內存總量、當前使用量、空閑內存量、以及緩沖使用中的內存量;第五行(Swap):表示類別同第四行(Mem),但此處反映著交換分區(Swap)的使用情況。通常,交換分區(Swap)被頻繁使用的情況,將被視作物理內存不足而造成的。第二部分--中間部分的內部命令提示欄:top運行中可以通過top的內部命令對進程的顯示方式進行控制。內部命令如下表:s-改變畫面更新頻率l-關閉或開啟第一部分第一行top信息的表示t-關閉或開啟第一部分第二行Tasks和第三行Cpus信息的表示m-關閉或開啟第一部分第四行Mem和第五行Swap信息的表示N-以PID的大小的順序排列表示進程列表(第三部分後述)P-以CPU佔用率大小的順序排列進程列表(第三部分後述)M-以內存佔用率大小的順序排列進程列表(第三部分後述)h-顯示幫助n-設置在進程列表所顯示進程的數量q-退出tops-改變畫面更新周期第三部分--最下部分的進程列表欄:以PID區分的進程列表將根據所設定的畫面更新時間定期的更新。通過top內部命令可以控制此處的顯示方式pmap可以根據進程查看進程相關信息佔用的內存情況,(進程號可以通過ps查看)如下所示:$pmap-d5647ps如下例所示:$ps-e-o'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'其中rsz是是實際內存$ps-e-o'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'|greporacle|sort-nrk其中rsz為實際內存,上例實現按內存排序,由大到小在Linux下查看內存我們一般用free命令:[root@scs-2tmp]#:-/+buffers/cache:4711162795064Swap:2048276801601968116下面是對這些數值的解釋:total:總計物理內存的大小。used:已使用多大。free:可用有多少。Shared:多個進程共享的內存總額。Buffers/cached:磁碟緩存的大小。第三行(-/+buffers/cached):used:已使用多大。free:可用有多少。第四行就不多解釋了。區別:第二行(mem)的used/free與第三行(-/+buffers/cache)used/free的區別。這兩個的區別在於使用的角度來看,第一行是從OS的角度來看,因為對於OS,buffers/cached都是屬於被使用,所以他的可用內存是16176KB,已用內存是3250004KB,其中包括,內核(OS)使用+Application(X,oracle,etc)使用的+buffers+cached.第三行所指的是從應用程序角度來看,對於應用程序來說,buffers/cached是等於可用的,因為buffer/cached是為了提高文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached會很快地被回收。所以從應用程序的角度來說,可用內存=系統freememory+buffers+cached。如上例:2795064=16176+110652+2668236接下來解釋什麼時候內存會被交換,以及按什麼方交換。當可用內存少於額定值的時候,就會開會進行交換。如何看額定值:cat/proc/meminfo[root@scs-2tmp]#cat/proc/meminfoMemTotal:3266180kBMemFree:17456kBBuffers:111328kBCached:2664024kBSwapCached:0kBActive:467236kBInactive:2644928kBHighTotal:0kBHighFree:0kBLowTotal:3266180kBLowFree:17456kBSwapTotal:2048276kBSwapFree:1968116kBDirty:8kBWriteback:0kBMapped:345360kBSlab:112344kBCommitted_AS:535292kBPageTables:2340kBVmallocTotal:536870911kBVmallocUsed:272696kBVmallocChunk:536598175kBHugePages_Total:0HugePages_Free:0Hugepagesize:2048kB用free-m查看的結果:[root@scs-2tmp]#free-:318931731601072605-/+buffers/cache:4602729Swap:2000781921查看/proc/kcore文件的大小(內存鏡像):[root@scs-2tmp]#ll-h/proc/kcore-r--------1rootroot4.1GJun1212:04/proc/kcore備註:佔用內存的測量測量一個進程佔用了多少內存,linux為我們提供了一個很方便的方法,/proc目錄為我們提供了所有的信息,實際上top等工具也通過這里來獲取相應的信息。/proc/meminfo機器的內存使用信息/proc/pid/mapspid為進程號,顯示當前進程所佔用的虛擬地址。/proc/pid/statm進程所佔用的內存[root@localhost~]#cat/proc/self/statm6545744003340輸出解釋CPU以及CPU0。。。的每行的每個參數意思(以第一行為例)為:參數解釋/proc//statusSize(pages)任務虛擬地址空間的大小VmSize/4Resident(pages)應用程序正在使用的物理內存的大小VmRSS/4Shared(pages)共享頁數0Trs(pages)程序所擁有的可執行虛擬內存的大小VmExe/4Lrs(pages)被映像到任務的虛擬內存空間的庫的大小VmLib/4Drs(pages)程序數據段和用戶態的棧的大小(VmData+VmStk)4dt(pages)04查看機器可用內存/proc/28248/>:-/+buffers/cache:288044735744Swap:1959920896081870312我們通過free命令查看機器空閑內存時,會發現free的值很小。這主要是因為,在linux中有這么一種思想,內存不用白不用,因此它盡可能的cache和buffer一些數據,以方便下次使用。但實際上這些內存也是可以立刻拿來使用的。所以空閑內存=free+buffers+cached=total-usedtop命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器。下面詳細介紹它的使用方法。top-02:53:32up16days,6:34,17users,loadaverage:0.24,0.21,0.24Tasks:481total,3running,474sleeping,0stopped,4zombieCpu(s):10.3%us,1.8%sy,0.0%ni,86.6%id,0.5%wa,0.2%hi,0.6%si,0.0%stMem:4042764ktotal,4001096kused,41668kfree,383536kbuffersSwap:2104472ktotal,7900kused,2096572kfree,%CPU%MEMTIME+.629:27..55:42..05:25..17:23..50:01.16konsole統計信息區前五行是系統整體的統計信息。第一行是任務隊列信息,同uptime命令的執行結果。其內容如下:01:06:48當前時間up1:22系統運行時間,格式為時:分1user當前登錄用戶數loadaverage:0.06,0.60,0.48系統負載,即任務隊列的平均長度。三個數值分別為1分鍾、5分鍾、15分鍾前到現在的平均值。第二、三行為進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。內容如下:Tasks:29total進程總數1running正在運行的進程數28sleeping睡眠的進程數0stopped停止的進程數0zombie僵屍進程數Cpu(s):0.3%us用戶空間佔用CPU百分比1.0%sy內核空間佔用CPU百分比0.0%ni用戶進程空間內改變過優先順序的進程佔用CPU百分比98.7%id空閑CPU百分比0.0%wa等待輸入輸出的CPU時間百分比0.0%hi0.0%si最後兩行為內存信息。內容如下:Mem:191272ktotal物理內存總量173656kused使用的物理內存總量17616kfree空閑內存總量22052kbuffers用作內核緩存的內存量Swap:192772ktotal交換區總量0kused使用的交換區總量192772kfree空閑交換區總量123988kcached緩沖的交換區總量。內存中的內容被換出到交換區,而後又被換入到內存,但使用過的交換區尚未被覆蓋,該數值即為這些內容已存在於內存中的交換區的大小。相應的內存再次被換出時可不必再對交換區寫入。進程信息區統計信息區域的下方顯示了各個進程的詳細信息。首先來認識一下各列的含義。序號列名含義aPID進程idbPPID父進程idcRUSERRealusernamedUID進程所有者的用戶ideUSER進程所有者的用戶名fGROUP進程所有者的組名gTTY啟動進程的終端名。不是從終端啟動的進程則顯示為?hPR優先順序iNInice值。負值表示高優先順序,正值表示低優先順序jP最後使用的CPU,僅在多CPU環境下有意義k%CPU上次更新到現在的CPU時間佔用百分比lTIME進程使用的CPU時間總計,單位秒mTIME+進程使用的CPU時間總計,單位1/100秒n%MEM進程使用的物理內存百分比oVIRT進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RESpSWAP進程使用的虛擬內存中,被換出的大小,單位kb。qRES進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATArCODE可執行代碼佔用的物理內存大小,單位kbsDATA可執行代碼以外的部分(數據段+棧)佔用的物理內存大小,單位kbtSHR共享內存大小,單位kbunFLT頁面錯誤次數vnDRT最後一次寫入到現在,被修改過的頁面數。wS進程狀態。D=不可中斷的睡眠狀態R=運行S=睡眠T=跟蹤/停止Z=僵屍進程xCOMMAND命令名/命令行yWCHAN若該進程在睡眠,則顯示睡眠中的系統函數名zFlags任務標志,參考sched.h默認情況下僅顯示比較重要的PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND列。可以通過下面的快捷鍵來更改顯示內容。更改顯示內容通過f鍵可以選擇顯示的內容。按f鍵之後會顯示列的列表,按a-z即可顯示或隱藏對應的列,最後按回車鍵確定。按o鍵可以改變列的顯示順序。按小寫的a-z可以將相應的列向右移動,而大寫的A-Z可以將相應的列向左移動。最後按回車鍵確定。按大寫的F或O鍵,然後按a-z可以將進程按照相應的列進行排序。而大寫的R鍵可以將當前的排序倒轉。==============================top命令使用過程中,還可以使用一些交互的命令來完成其它參數的功能。這些命令是通過快捷鍵啟動的。<空格>:立刻刷新。P:根據CPU使用大小進行排序。T:根據時間、累計時間排序。q:退出top命令。m:切換顯示內存信息。t:切換顯示進程和CPU狀態信息。c:切換顯示命令名稱和完整命令行。M:根據使用內存大小進行排序。W:將當前設置寫入~/.toprc文件中。這是寫top配置文件的推薦方法。可以看到,top命令是一個功能十分強大的監控系統的工具,對於系統管理員而言尤其重要。但是,它的缺點是會消耗很多系統資源。應用實例使用top命令可以監視指定用戶,預設情況是監視所有用戶的進程。如果想查看指定用戶的情況,在終端中按「U」鍵,然後輸入用戶名,系統就會切換為指定用戶的進程運行界面。a.作用free命令用來顯示內存的使用情況,使用許可權是所有用戶。b.格式free[-b-k-m][-o][-sdelay][-t][-V]c.主要參數-b-k-m:分別以位元組(KB、MB)為單位顯示內存使用情況。-sdelay:顯示每隔多少秒數來顯示一次內存使用情況。-t:顯示內存總和列。-o:不顯示緩沖區調節列。d.應用實例free命令是用來查看內存使用情況的主要命令。和top命令相比,它的優點是使用簡單,並且只佔用很少的系統資源。通過-S參數可以使用free命令不間斷地監視有多少內存在使用,這樣可以把它當作一個方便實時監控器。#free-b-s5使用這個命令後終端會連續不斷地報告內存使用情況(以位元組為單位),每5秒更新一次。

『伍』 Linux裡面cpu佔用太高排查思路是什麼

思路就是top查看是什麼進程佔用高,一般是應用或者資料庫,應用方面可以看看運行吐出日誌是否有報錯信息,查netstat連接應用埠的會話是不是有異常,資料庫進程高,可以使用自帶的檢查命令後台看是否有執行很久的sql事務,鎖等待頻繁,報錯日誌等,找到問題針對性的優化,一步一步解決。

『陸』 linux程序cpu佔用率太高

如果就是佔用率太高的話,我建議你就是直接就是卸載掉,因為有的時候這種佔佔。可能太高的話,對於我們的手機來說也是不太好的。

設置角色密碼(可結合密碼保護卡)。
2、設置背包密碼,背包分二部分(G也分2部份,1大額,1小額),一部分需要密碼(可以放重要的財產),一部分不要密碼(放置常用物品),可結合密保卡。
3、裝備欄設置密碼保護卡,上線後需要輸入密保卡解除裝備欄的密報卡數,才能使用技能 ,如果不解除綁定,不能使用技能並且無法交易。
4、倉庫通過密碼打開後,與背包相同。
5、設置退出密碼,輸入退出密碼正常才能下線,非正常下線5分內補能登陸。設置下次登陸地點,玩家下線時可以選者下次登陸的IP段(以市為單位,不在IP段裡面的IP,不能登陸 )
6、計算機綁定,對於有計算機的玩家可以綁定CPU編號,這點某些殺毒軟體有這個技術,你們估計也有這技術。
強固密碼內容
一個強固的密碼至於要有下列四方面內容的三種:
·大寫字母
·小寫字母
·數字
·非字母數字的字元,如標點符號
.特殊符號,多國數字
強壯密碼
大多數情況下,僅養成使用好密碼的習慣是不夠的;你還需要使用更強壯的密碼來有效阻止類似於字典攻擊和暴力破解攻擊。我們前面已經討論,一個強壯的密碼至少需要六個字元,不能包括用戶名的任何一部分,並且至少要有大小寫字母、數字和通配符等。為了實施強壯的密碼你需要在注冊表裡LSA項加入本課已提過的其它的密碼過濾器。在主域控制器或在任一可能會升級為主域控制器的備份域控制器上,你都需要在注冊表HKLM\System\CurrentControlSet\Control\LSA中加入PASSFILT的字串。
大漏洞
在Windows2000啟動之後,按照屏幕提示按下ALT+CTRL+DEL進行登錄,在登錄界面將游標移至用戶名輸入框,按鍵盤上的Ctrl+Shift鍵進行輸入法的切換,屏幕上出現輸入法狀態條,在出現的「全拼」輸入法中將滑鼠移至輸入法狀態條點擊滑鼠右鍵,出現的選單中選擇「幫助」,然後繼續選擇「輸入法入門」,在窗口頂部會出現幾個按鈕,奧妙就在「選項按鈕」上。如果系統是未安裝Windows2000 ServicePack1或IE5.5的系統,用滑鼠左鍵點擊選項按鈕,在出現的選單中選擇「主頁」,這時在已出現的幫助窗口的右側會出現IE瀏覽器界面中的「此頁不可顯示」頁面,其中有個「檢測網路設置」的鏈接,點擊它就會出現網路設置選項,這樣任何人都可以對網路設置甚至控制面板做任何修改。
或者之前用滑鼠左鍵點擊「選項」按鈕時,在出現的選單選擇「Internet選項」中,就可以對主頁、鏈結,安全、高級選項等做任何修改。最為嚴重的是用滑鼠右鍵點擊先前提到的「選項」按鈕會出現一個選單,選擇「跳至URL」,這時出現一個對話框,其中有一個跳至該URL輸入框,輸入你想看到的路徑,比如c:,那麼這時在已出現的幫助窗口的右側會出現資源管理器c盤的界面顯示,這時已經是系統管理員許可權對C盤進行操作了。操作者可以對看到的數據做任何的操作,這樣他就完全繞過了Windows2000的登錄驗證機制

『柒』 linux 性能優化-- cpu 切換以及cpu過高

本文先介紹了cpu上下文切換的基礎知識,以及上下文切換的類型(進程,線程等切換)。然後介紹了如何查看cpu切換次數的工具和指標的解釋。同時對日常分析種cpu過高的情況下如何分析和定位的方法做了一定的介紹,使用一個簡單的案例進行分析,先用top,pidstat等工具找出佔用過高的進程id,然後通過分析到底是用戶態cpu過高,還是內核態cpu過高,並用perf 定位到具體的調用函數。(來自極客時間課程學習筆記)

1、多任務競爭CPU,cpu變換任務的時候進行CPU上下文切換(context switch)。CPU執行任務有4種方式:進程、線程、或者硬體通過觸發信號導致中斷的調用。

2、當切換任務的時候,需要記錄任務當前的狀態和獲取下一任務的信息和地址(指針),這就是上下文的內容。因此,上下文是指某一時間點CPU寄存器(CPU register)和程序計數器(PC)的內容, 廣義上還包括內存中進程的虛擬地址映射信息.

3、上下文切換的過程:

4、根據任務的執行形式,相應的下上文切換,有進程上下文切換、線程上下文切換、以及中斷上下文切換三類。

5、進程和線程的區別:
進程是資源分配和執行的基本單位;線程是任務調度和運行的基本單位。線程沒有資源,進程給指針提供虛擬內存、棧、變數等共享資源,而線程可以共享進程的資源。

6、進程上下文切換:是指從一個進程切換到另一個進程。

(1)進程運行態為內核運行態和進程運行態。內核空間態資源包括內核的堆棧、寄存器等;用戶空間態資源包括虛擬內存、棧、變數、正文、數據等

(2)系統調用(軟中斷)在內核態完成的,需要進行2次CPU上下文切換(用戶空間-->內核空間-->用戶空間),不涉及用戶態資源,也不會切換進程。

(3)進程是由內核來管理和調度的,進程的切換只能發生在內核態。所以,進程的上下文不僅包括了用戶空間的資源,也包括內核空間資源。

(4)進程的上下文切換過程:

(5)、下列將會觸發進程上下文切換的場景:

7、線程上下文切換:

8、中斷上下文切換
快速響應硬體的事件,中斷處理會打斷進程的正常調度和執行。同一CPU內,硬體中斷優先順序高於進程。切換過程類似於系統調用的時候,不涉及到用戶運行態資源。但大量的中斷上下文切換同樣可能引發性能問題。

重點關注信息:

系統的就緒隊列過長,也就是正在運行和等待 CPU 的進程數過多,導致了大量的上下文切換,而上下文切換又導致了系統 CPU 的佔用率升高。

這個結果中有兩列內容是我們的重點關注對象。一個是 cswch ,表示每秒自願上下文切換(voluntary context switches)的次數,另一個則是 nvcswch ,表示每秒非自願上下文切換(non voluntary context switches)的次數。

linux的中斷使用情況可以從 /proc/interrupts 這個只讀文件中讀取。/proc 實際上是 Linux 的一個虛擬文件系統,用於內核空間與用戶空間之間的通信。/proc/interrupts 就是這種通信機制的一部分,提供了一個只讀的中斷使用情況。

重調度中斷(RES),這個中斷類型表示,喚醒空閑狀態的 CPU 來調度新的任務運行。這是多處理器系統(SMP)中,調度器用來分散任務到不同 CPU 的機制,通常也被稱為處理器間中斷(Inter-Processor Interrupts,IPI)。

這個數值其實取決於系統本身的 CPU 性能。如果系統的上下文切換次數比較穩定,那麼從數百到一萬以內,都應該算是正常的。但當上下文切換次數超過一萬次,或者切換次數出現數量級的增長時,就很可能已經出現了性能問題。這時,需要根據上下文切換的類型,再做具體分析。

比方說:

首先通過uptime查看系統負載,然後使用mpstat結合pidstat來初步判斷到底是cpu計算量大還是進程爭搶過大或者是io過多,接著使用vmstat分析切換次數,以及切換類型,來進一步判斷到底是io過多導致問題還是進程爭搶激烈導致問題。

CPU 使用率相關的重要指標:

性能分析工具給出的都是間隔一段時間的平均 CPU 使用率,所以要注意間隔時間的設置,特別是用多個工具對比分析時,你一定要保證它們用的是相同的間隔時間。比如,對比一下 top 和 ps 這兩個工具報告的 CPU 使用率,默認的結果很可能不一樣,因為 top 默認使用 3 秒時間間隔,而 ps 使用的卻是進程的整個生命周期。

top 和 ps 是最常用的性能分析工具:

這個輸出結果中,第三行 %Cpu 就是系統的 CPU 使用率,top 默認顯示的是所有 CPU 的平均值,這個時候你只需要按下數字 1 ,就可以切換到每個 CPU 的使用率了。繼續往下看,空白行之後是進程的實時信息,每個進程都有一個 %CPU 列,表示進程的 CPU 使用率。它是用戶態和內核態 CPU 使用率的總和,包括進程用戶空間使用的 CPU、通過系統調用執行的內核空間 CPU 、以及在就緒隊列等待運行的 CPU。在虛擬化環境中,它還包括了運行虛擬機佔用的 CPU。

預先安裝 stress 和 sysstat 包,如 apt install stress sysstat。

stress 是一個 Linux 系統壓力測試工具,這里我們用作異常進程模擬平均負載升高的場景。而 sysstat 包含了常用的 Linux 性能工具,用來監控和分析系統的性能。我們的案例會用到這個包的兩個命令 mpstat 和 pidstat。

下面的 pidstat 命令,就間隔 1 秒展示了進程的 5 組 CPU 使用率,

包括:

perf 是 Linux 2.6.31 以後內置的性能分析工具。它以性能事件采樣為基礎,不僅可以分析系統的各種事件和內核性能,還可以用來分析指定應用程序的性能問題。

第一種常見用法是 perf top,類似於 top,它能夠實時顯示佔用 CPU 時鍾最多的函數或者指令,因此可以用來查找熱點函數,使用界面如下所示:

輸出結果中,第一行包含三個數據,分別是采樣數(Samples)如2K、事件類型(event)如cpu-clock:pppH和事件總數量(Event count)如:371909314。

第二種常見用法,也就是 perf record 和 perf report。 perf top 雖然實時展示了系統的性能信息,但它的缺點是並不保存數據,也就無法用於離線或者後續的分析。而 perf record 則提供了保存數據的功能,保存後的數據,需要你用 perf report 解析展示。

1.啟動docker 運行進程:

2.ab工具測試伺服器性能
ab(apache bench)是一個常用的 HTTP 服務性能測試工具,這里用來模擬 Ngnix 的客戶端。

3.分析過程

CPU 使用率是最直觀和最常用的系統性能指標,在排查性能問題時,通常會關注的第一個指標。所以更要熟悉它的含義,尤其要弄清楚:

這幾種不同 CPU 的使用率。比如說:

碰到 CPU 使用率升高的問題,你可以藉助 top、pidstat 等工具,確認引發 CPU 性能問題的來源;再使用 perf 等工具,排查出引起性能問題的具體函數.

閱讀全文

與linuxcpu優化相關的資料

熱點內容
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