1. 64位和32位的區(qū)別
- 運(yùn)行能力不同。64位可以一次性可以處理8個(gè)字節(jié)的數(shù)據(jù)量奶赠,而32位一次性只可以處理4個(gè)字節(jié)的數(shù)據(jù)量,因此64位比32位的運(yùn)行能力提高了一倍。
- 內(nèi)存尋址不同搔谴。64位最大尋址空間為2的64次方,理論值直接達(dá)到了16TB桩撮,而32位的最大尋址空間為2的32次方敦第,為4GB慌核,換而言之,就是說32位系統(tǒng)的處理器最大只支持到4G內(nèi)存申尼,而64位系統(tǒng)最大支持的內(nèi)存高達(dá)億位數(shù)垮卓。
- 運(yùn)行軟件不同。由于32位和64位CPU的指令集是不同的师幕。所以需要區(qū)分32位和64位版本的軟件粟按。為了保證兼容性,64位CPU上也能運(yùn)行老的32位指令霹粥。于是實(shí)際上我們可以在64位CPU上運(yùn)行32位程序灭将,但是反過來不行。簡而言之就是64位的操作系統(tǒng)可以兼容運(yùn)行32位的軟件后控,反過來32位系統(tǒng)不可以運(yùn)行64位的軟件庙曙。
2. 用戶態(tài)和內(nèi)核態(tài)
-
linux進(jìn)程有4GB地址空間,3G-4G大部分是共享的浩淘,是內(nèi)核態(tài)的地址空間捌朴。這里存放整個(gè)內(nèi)核的代碼和所有的內(nèi)核模塊以及內(nèi)核所維護(hù)的數(shù)據(jù)。
image.png 特權(quán)級的概念
??對于任何操作系統(tǒng)來說张抄,創(chuàng)建一個(gè)進(jìn)程是核心功能砂蔽。創(chuàng)建進(jìn)程要做很多工作,會(huì)消耗很多物理資源署惯。比如分配物理內(nèi)存左驾,父子進(jìn)程拷貝信息,拷貝設(shè)置頁目錄頁表等等极谊,這些工作得由特定的進(jìn)程去做诡右,所以就有了特權(quán)級別的概念。最關(guān)鍵的工作必須交給特權(quán)級最高的進(jìn)程去執(zhí)行轻猖,這樣可以做到集中管理帆吻,減少有限資源的訪問和使用沖突。inter x86架構(gòu)的cpu一共有四個(gè)級別蜕依,0-3級桅锄,0級特權(quán)級最高,3級特權(quán)級最低样眠。用戶態(tài)和內(nèi)核態(tài)的概念
??當(dāng)一個(gè)進(jìn)程在執(zhí)行用戶自己的代碼時(shí)處于用戶運(yùn)行態(tài)(用戶態(tài))友瘤,此時(shí)特權(quán)級最低,為3級檐束,是普通的用戶進(jìn)程運(yùn)行的特權(quán)級辫秧,大部分用戶直接面對的程序都是運(yùn)行在用戶態(tài)。Ring3狀態(tài)不能訪問Ring0的地址空間被丧,包括代碼和數(shù)據(jù)盟戏;當(dāng)一個(gè)進(jìn)程因?yàn)橄到y(tǒng)調(diào)用陷入內(nèi)核代碼中執(zhí)行時(shí)處于內(nèi)核運(yùn)行態(tài)(內(nèi)核態(tài))绪妹,此時(shí)特權(quán)級最高,為0級柿究。執(zhí)行的內(nèi)核代碼會(huì)使用當(dāng)前進(jìn)程的內(nèi)核棧邮旷,每個(gè)進(jìn)程都有自己的內(nèi)核棧。
??用戶運(yùn)行一個(gè)程序蝇摸,該程序創(chuàng)建的進(jìn)程開始時(shí)運(yùn)行自己的代碼婶肩,處于用戶態(tài)。如果要執(zhí)行文件操作貌夕、網(wǎng)絡(luò)數(shù)據(jù)發(fā)送等操作必須通過write律歼、send等系統(tǒng)調(diào)用,這些系統(tǒng)調(diào)用會(huì)調(diào)用內(nèi)核的代碼啡专。進(jìn)程會(huì)切換到Ring0险毁,然后進(jìn)入3G-4G中的內(nèi)核地址空間去執(zhí)行內(nèi)核代碼來完成相應(yīng)的操作。內(nèi)核態(tài)的進(jìn)程執(zhí)行完后又會(huì)切換到Ring3们童,回到用戶態(tài)畔况。這樣,用戶態(tài)的程序就不能隨意操作內(nèi)核地址空間病附,具有一定的安全保護(hù)作用问窃。這里說的保護(hù)模式是指通過內(nèi)存頁表操作等機(jī)制,保證進(jìn)程間的地址空間不會(huì)互相沖突完沪,一個(gè)進(jìn)程的操作不會(huì)修改另一個(gè)進(jìn)程地址空間中的數(shù)據(jù)。用戶態(tài)和內(nèi)核態(tài)的切換
??當(dāng)在系統(tǒng)中執(zhí)行一個(gè)程序時(shí)嵌戈,大部分時(shí)間是運(yùn)行在用戶態(tài)下的覆积,在其需要操作系統(tǒng)幫助完成一些用戶態(tài)自己沒有特權(quán)和能力完成的操作時(shí)就會(huì)切換到內(nèi)核態(tài)。用戶態(tài)切換到內(nèi)核態(tài)的3種方式
(1)系統(tǒng)調(diào)用
??這是用戶態(tài)進(jìn)程主動(dòng)要求切換到內(nèi)核態(tài)的一種方式熟呛。用戶態(tài)進(jìn)程通過系統(tǒng)調(diào)用申請使用操作系統(tǒng)提供的服務(wù)程序完成工作宽档。例如fork()就是執(zhí)行了一個(gè)創(chuàng)建新進(jìn)程的系統(tǒng)調(diào)用。系統(tǒng)調(diào)用的機(jī)制是使用了操作系統(tǒng)為用戶特別開放的一個(gè)中斷來實(shí)現(xiàn)庵朝,如Linux的int 80h中斷吗冤。
(2)異常
??當(dāng)cpu在執(zhí)行運(yùn)行在用戶態(tài)下的程序時(shí),發(fā)生了一些沒有預(yù)知的異常九府,這時(shí)會(huì)觸發(fā)由當(dāng)前運(yùn)行進(jìn)程切換到處理此異常的內(nèi)核相關(guān)進(jìn)程中椎瘟,也就是切換到了內(nèi)核態(tài),如缺頁異常侄旬。
(3)外圍設(shè)備的中斷
??當(dāng)外圍設(shè)備完成用戶請求的操作后肺蔚,會(huì)向CPU發(fā)出相應(yīng)的中斷信號(hào),這時(shí)CPU會(huì)暫停執(zhí)行下一條即將要執(zhí)行的指令而轉(zhuǎn)到與中斷信號(hào)對應(yīng)的處理程序去執(zhí)行儡羔,如果前面執(zhí)行的指令時(shí)用戶態(tài)下的程序宣羊,那么轉(zhuǎn)換的過程自然就會(huì)是由用戶態(tài)到內(nèi)核態(tài)的切換璧诵。如硬盤讀寫操作完成,系統(tǒng)會(huì)切換到硬盤讀寫的中斷處理程序中執(zhí)行后邊的操作等仇冯。
??這三種方式是系統(tǒng)在運(yùn)行時(shí)由用戶態(tài)切換到內(nèi)核態(tài)的最主要方式之宿,其中系統(tǒng)調(diào)用可以認(rèn)為是用戶進(jìn)程主動(dòng)發(fā)起的,異常和外圍設(shè)備中斷則是被動(dòng)的苛坚。從觸發(fā)方式上看澈缺,切換方式都不一樣,但從最終實(shí)際完成由用戶態(tài)到內(nèi)核態(tài)的切換操作來看炕婶,步驟有時(shí)一樣的姐赡,都相當(dāng)于執(zhí)行了一個(gè)中斷響應(yīng)的過程。系統(tǒng)調(diào)用實(shí)際上最終是中斷機(jī)制實(shí)現(xiàn)的柠掂,而異常和中斷的處理機(jī)制基本一致项滑。
3. 內(nèi)部碎片和外部碎片
- 內(nèi)部碎片就是已經(jīng)被分配出去(能明確指出屬于哪個(gè)進(jìn)程)卻不能被利用的內(nèi)存空間;
- 外部碎片指的是還沒有被分配出去(不屬于任何進(jìn)程)涯贞,但由于太小了無法分配給申請內(nèi)存空間的新進(jìn)程的內(nèi)存空閑區(qū)域枪狂。
- 單道連續(xù)分配只有內(nèi)部碎片。多道固定連續(xù)分配既有內(nèi)部碎片宋渔,又有外部碎片州疾。解決方法:使用伙伴系統(tǒng)算法。
4. 內(nèi)存規(guī)劃方式
??虛擬內(nèi)存的由來:當(dāng)直接讓進(jìn)程使用直接的物理內(nèi)存時(shí)皇拣,當(dāng)對物理內(nèi)存操作時(shí)會(huì)出現(xiàn)混亂严蓖。有兩種解決這個(gè)問題:一種通過基址寄存器和界線寄存器形成地址空間,通過交換技術(shù)解決內(nèi)存超載氧急。另外一種就是基于分頁的虛擬地址技術(shù)颗胡。
- 交換技術(shù):把一個(gè)進(jìn)程完整調(diào)入內(nèi)存運(yùn)行一段時(shí)間,然后把他存回磁盤吩坝,空閑進(jìn)程主要存儲(chǔ)在磁盤上毒姨。缺點(diǎn):當(dāng)進(jìn)程空間大于內(nèi)存時(shí),不能使用钉寝。
- 虛擬內(nèi)存:把一個(gè)進(jìn)程的一部分調(diào)入內(nèi)存中運(yùn)行弧呐,當(dāng)內(nèi)存沒有空閑空間時(shí),將新的覆蓋舊的頁嵌纲,同時(shí)將舊的寫入磁盤俘枫。虛擬內(nèi)存主要使用分頁存儲(chǔ)管理模式。
- 分頁存儲(chǔ):實(shí)際上存儲(chǔ)在物理內(nèi)存上(磁盤上)疹瘦,運(yùn)行時(shí)一頁一頁讀缺懒ā;
- 基本思想:用戶程序的地址空間被劃分成若干固定大小的區(qū)域,稱為“頁”邓嘹,相應(yīng)地酣栈,內(nèi)存空間分成若干個(gè)物理塊,頁和塊的大小相等汹押】篌荩可將用戶程序的任一頁放在內(nèi)存的任一塊中,實(shí)現(xiàn)了離散分配棚贾。頁面的大小是為2n 窖维,通常為1KB、2KB妙痹、2n KB等铸史。
- 優(yōu)點(diǎn):頁面是主存物理空間中劃分出來的等長的固定區(qū)域。分頁方式的優(yōu)點(diǎn)是頁長固定怯伊,因而便于構(gòu)造頁表琳轿、易于管理,且不存在外部碎片耿芹。
- 缺點(diǎn):是頁長與程序的邏輯大小不相關(guān)崭篡。例如,某個(gè)時(shí)刻一個(gè)子程序可能有一部分在主存中吧秕,另一部分則在輔存中琉闪。這不利于編程時(shí)的獨(dú)立性,并給換入換出處理砸彬、存儲(chǔ)保護(hù)和存儲(chǔ)共享等操作造成麻煩颠毙。
- 分段存儲(chǔ)
- 基本思想:段是按照程序的自然分界劃分的長度可以動(dòng)態(tài)改變的區(qū)域。通常拿霉,程序員把子程序吟秩、操作數(shù)和常數(shù)等不同類型的數(shù)據(jù)劃分到不同的段中,并且每個(gè)程序可以有多個(gè)相同類型的段绽淘。段表本身也是一個(gè)段,可以存在輔存中闹伪,但一般是駐留在主存中沪铭。將用戶程序地址空間分成若干個(gè)大小不等的段,每段可以定義一組相對完整的邏輯信息偏瓤。存儲(chǔ)分配時(shí)杀怠,以段為單位,段與段在內(nèi)存中可以不相鄰接厅克,也實(shí)現(xiàn)了離散分配赔退。
- 優(yōu)缺點(diǎn):分頁對程序員而言是不可見的,而分段通常對程序員而言是可見的,因而分段為組織程序和數(shù)據(jù)提供了方便硕旗。與頁式虛擬存儲(chǔ)器相比窗骑,段式虛擬存儲(chǔ)器有許多優(yōu)點(diǎn):
1)段的邏輯獨(dú)立性使其易于編譯、管理漆枚、修改和保護(hù)创译,也便于多道程序共享。
2)段長可以根據(jù)需要?jiǎng)討B(tài)改變墙基,允許自由調(diào)度软族,以便有效利用主存空間。
3)方便編程残制,分段共享立砸,分段保護(hù),動(dòng)態(tài)鏈接初茶,動(dòng)態(tài)增長 - 因?yàn)槎蔚拈L度不固定颗祝,段式虛擬存儲(chǔ)器也有一些缺點(diǎn):
1)主存空間分配比較麻煩。
2)容易在段間留下許多碎片纺蛆,造成存儲(chǔ)空間利用率降低吐葵。
3)由于段長不一定是2的整數(shù)次冪,因而不能簡單地像分頁方式那樣用虛擬地址和實(shí)存地址的最低若干二進(jìn)制位作為段內(nèi)地址桥氏,并與段號(hào)進(jìn)行直接拼接温峭,必須用加法操作通過段起址與段內(nèi)地址的求和運(yùn)算得到物理地址。因此字支,段式存儲(chǔ)管理比頁式存儲(chǔ)管理方式需要更多的硬件支持凤藏。
- 段頁存儲(chǔ)
- 基本思想:段頁式存儲(chǔ)組織是分段式和分頁式結(jié)合的存儲(chǔ)組織方法,這樣可充分利用分段管理和分頁管理的優(yōu)點(diǎn)堕伪。用分段方法來分配和管理虛擬存儲(chǔ)器揖庄。程序的地址空間按邏輯單位分成基本獨(dú)立的段,而每一段有自己的段名欠雌,再把每段分成固定大小的若干頁蹄梢。用分頁方法來分配和管理實(shí)存。即把整個(gè)主存分成與上述頁大小相等的存儲(chǔ)塊富俄,可裝入作業(yè)的任何一頁禁炒。程序?qū)?nèi)存的調(diào)入或調(diào)出是按頁進(jìn)行的。但它又可按段實(shí)現(xiàn)共享和保護(hù)霍比。
- 優(yōu)點(diǎn)
1)它提供了大量的虛擬存儲(chǔ)空間幕袱。
2)能有效地利用主存,為組織多道程序運(yùn)行提供了方便悠瞬。 - 缺點(diǎn):
1)增加了硬件成本们豌、系統(tǒng)的復(fù)雜性和管理上的開消涯捻。
2)存在著系統(tǒng)發(fā)生抖動(dòng)的危險(xiǎn)。
3)存在著內(nèi)部碎片望迎。
4)還有各種表格要占用主存空間障癌。
段頁式存儲(chǔ)管理技術(shù)對當(dāng)前的大、中型計(jì)算機(jī)系統(tǒng)來說擂煞,算是最通用混弥、最靈活的一種方案。
5. 頁面置換算法
https://www.cnblogs.com/Leophen/p/11397699.html
??進(jìn)程運(yùn)行時(shí)对省,若其訪問的頁面不在內(nèi)存而需將其調(diào)入蝗拿,但內(nèi)存已無空閑空間時(shí),就需要從內(nèi)存中調(diào)出一頁程序或數(shù)據(jù)蒿涎,送入磁盤的對換區(qū)哀托,其中選擇調(diào)出頁面的算法就稱為頁面置換算法。好的頁面置換算法應(yīng)有較低的頁面更換頻率劳秋,也就是說仓手,應(yīng)將以后不會(huì)再訪問或者以后較長時(shí)間內(nèi)不會(huì)再訪問的頁面先調(diào)出。
- FIFO(先進(jìn)先出算法)
??FIFO 算法是最簡單的頁面置換算法玻淑。FIFO 頁面置換算法為每個(gè)頁面記錄了調(diào)到內(nèi)存的時(shí)間嗽冒,當(dāng)必須置換頁面時(shí)會(huì)選擇最舊的頁面。FIFO 算法基于隊(duì)列實(shí)現(xiàn)补履,F(xiàn)IFO 頁面置換算法易于理解和編程添坊。然而,它的性能并不總是十分理想:- 其一箫锤,所置換的頁面可以是很久以前使用過但現(xiàn)已不再使用的初始化模塊
- 其二贬蛙,所置換的頁面可以包含一個(gè)被大量使用的變量,它早就初始化了谚攒,但仍在不斷使用
- OPT(最佳置換算法)
??這種頁面置換算法確保對于給定數(shù)量的幀會(huì)產(chǎn)生最低的可能的缺頁錯(cuò)誤率阳准。FIFO 和 OPT 算法的區(qū)別在于:除了在時(shí)間上向后或向前看之外,F(xiàn)IFO 算法使用的是頁面調(diào)入內(nèi)存的時(shí)間馏臭,OPT 算法使用的是頁面將來使用的時(shí)間野蝇。 - LRU(最近最少使用算法)
??選擇最近最長時(shí)間未訪問過的頁面予以淘汰,它認(rèn)為過去一段時(shí)間內(nèi)未訪問過的頁面括儒,在最近的將來可能也不會(huì)被訪問浪耘。該算法為每個(gè)頁面設(shè)置一個(gè)訪問字段,來記錄頁面自上次被訪問以來所經(jīng)歷的時(shí)間塑崖,淘汰頁面時(shí)選擇現(xiàn)有頁面中值最大的予以淘汰。
??OPT 和 LRU 算法的區(qū)別在于:LRU 算法根據(jù)各頁以前的情況痛倚,是“向前看”的规婆,而最佳置換算法則根據(jù)各頁以后的使用情況,是“向后看”的,LRU 性能較好抒蚜,但需要寄存器和棧的硬件支持掘鄙,LRU 是堆棧類的算法,理論上可以證明嗡髓,堆棧類算法不可能出現(xiàn) Belady 異常操漠。 - Clock(時(shí)鐘置換算法)
- LFU(最不常用算法)
- MFU(最常使用算法)
6. 生產(chǎn)者消費(fèi)者模式
??生產(chǎn)者消費(fèi)者問題是線程模型中的經(jīng)典問題:生產(chǎn)者和消費(fèi)者在同一時(shí)間段內(nèi)共用同一存儲(chǔ)空間,生產(chǎn)者向空間里生產(chǎn)數(shù)據(jù)饿这,而消費(fèi)者取走數(shù)據(jù)浊伙。優(yōu)點(diǎn):支持并發(fā)、解耦长捧。
7. 進(jìn)程間通信的方式
- 管道( pipe ):管道是一種半雙工的通信方式嚣鄙,數(shù)據(jù)只能單向流動(dòng),而且只能在具有親緣關(guān)系的進(jìn)程間使用串结。進(jìn)程的親緣關(guān)系通常是指父子進(jìn)程關(guān)系哑子。普通管道允許兩個(gè)進(jìn)程按標(biāo)準(zhǔn)的生產(chǎn)者-消費(fèi)者方式進(jìn)行通信:生產(chǎn)者向管道的一端(寫入端)寫,消費(fèi)者從管道的另一端(讀出端)讀肌割。因此卧蜓,普通管道是單向的,只允許單向通信把敞。如果需要雙向通信弥奸,那么就要采用兩個(gè)管道,而每個(gè)管道向不同方向發(fā)送數(shù)據(jù)先巴。
- 有名管道 (named pipe) : 有名管道也是半雙工的通信方式其爵,但是它允許無親緣關(guān)系進(jìn)程間的通信。
- 信號(hào) ( sinal ) : 信號(hào)是一種比較復(fù)雜的通信方式伸蚯,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生摩渺。
- 信號(hào)量( semophore ) : 信號(hào)量是一個(gè)計(jì)數(shù)器,可以用來控制多個(gè)進(jìn)程對共享資源的訪問剂邮。它常作為一種鎖機(jī)制摇幻,防止某進(jìn)程正在訪問共享資源時(shí),其他進(jìn)程也訪問該資源挥萌。因此绰姻,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線程之間的同步手段。
- 共享內(nèi)存( shared memory ) :共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問的內(nèi)存引瀑,這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建狂芋,但多個(gè)進(jìn)程都可以訪問。共享內(nèi)存是最快的 IPC 方式憨栽,因?yàn)樗鼪]有數(shù)據(jù)拷貝的過程帜矾,它是針對其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的翼虫。它往往與其他通信機(jī)制,如信號(hào)量屡萤,配合使用珍剑,來實(shí)現(xiàn)進(jìn)程間的同步和通信。
- 內(nèi)存映射(mapped memory):內(nèi)存映射允許任何多個(gè)進(jìn)程間通信死陆,每一個(gè)使用該機(jī)制的進(jìn)程通過把一個(gè)共享的文件映射到自己的進(jìn)程地址空間來實(shí)現(xiàn)它招拙。
- 套接字( socket ) : 套接口也是一種進(jìn)程間通信機(jī)制,與其他通信機(jī)制不同的是措译,它可用于不同及其間的進(jìn)程通信别凤。
- 消息隊(duì)列( message queue ) : 消息隊(duì)列是由消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí)瞳遍。消息隊(duì)列克服了信號(hào)傳遞信息少闻妓、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。
8. 進(jìn)程上下文切換與和線程上下文切換
- 什么是上下文切換掠械?
??上下文切換就是從當(dāng)前執(zhí)行任務(wù)切換到另一個(gè)任務(wù)執(zhí)行的過程由缆。但是,為了確保下次能從正確的位置繼續(xù)執(zhí)行猾蒂,在切換之前均唉,會(huì)保存上一個(gè)任務(wù)的狀態(tài)。 - 區(qū)別
??進(jìn)程上下文切換與線程上下文切換最主要的區(qū)別就是線程的切換虛擬空間內(nèi)存是相同的(因?yàn)槎际菍儆谧约旱倪M(jìn)程)肚菠,但是舔箭,進(jìn)程切換的虛擬空間內(nèi)存則是不同的。同時(shí)蚊逢,這兩種上下文切換的處理都是通過操作系統(tǒng)內(nèi)核來完成的层扶。內(nèi)核的這種切換過程伴隨的最顯著的性能損耗是將寄存器中的內(nèi)容切換出。
9. 系統(tǒng)突然訪問變慢烙荷,如何排查和解決镜会?
- 第一步:登錄后臺(tái)服務(wù)器/監(jiān)控平臺(tái),查看系統(tǒng)資源是否達(dá)到上限终抽,例如:CPU戳表、內(nèi)存、磁盤昼伴、I/O匾旭、網(wǎng)絡(luò)帶寬等,如果是這些問題圃郊,先將這些問題逐一解決:
- 如果是CPU的問題东羹,則需要查看一下CPU占比比較高的進(jìn)程吨述,然后使用jstack命令生成進(jìn)程的堆棧信息漆撞,看是否發(fā)生頻繁Full GC,如果是的話灰伟,還需要看一下內(nèi)存快照,分析一下內(nèi)存情況(可以使用java自帶的或第三方工具)植康;
- 如果是磁盤空間滿了效扫,及時(shí)清理磁盤;
- 如果是帶寬滿了席覆,聯(lián)系網(wǎng)絡(luò)工程師解決史辙。
- 第二步:檢查應(yīng)用服務(wù)器(Jboss/Tomcat)的線程池配置是否合理,看一下請求的排隊(duì)現(xiàn)象是否嚴(yán)重佩伤,如果嚴(yán)重則需要重新設(shè)置合理的線程池聊倔。同樣,檢查一下數(shù)據(jù)庫的連接池設(shè)置是否合理生巡,增大連接池設(shè)置耙蔑,同時(shí)檢查一下是否有慢sql,如果有慢sql孤荣,則進(jìn)行優(yōu)化(優(yōu)化方案是查看執(zhí)行計(jì)劃甸陌,設(shè)置合理的索引等)。
- 第三步:查看訪問慢的服務(wù)的調(diào)用鏈盐股,查看一下調(diào)用鏈中的每一步響應(yīng)時(shí)間是否合理钱豁,如果不合理,則聯(lián)系相關(guān)系統(tǒng)的負(fù)責(zé)人進(jìn)行排查和解決疯汁。
- 第四步:檢查web服務(wù)器的請求日志牲尺,看一下是否存在Doss攻擊,如果有Doss攻擊幌蚊,則將攻擊者的IP添加到防火墻的黑名單里谤碳。
10. 常用Linux 命令
- 整機(jī):top 主要看load average系統(tǒng)負(fù)載
- CPU:vmstat或者pidstat –p 進(jìn)程號(hào) –r 采樣間隔數(shù)
- 內(nèi)存:free –m
- 磁盤:df –h
- 磁盤IO:iostat –xdk 23
- 網(wǎng)絡(luò)IO:ifstat
- 創(chuàng)建多級目錄:mkdir -p Project/a/src
11. Linux如何通過命令查看日志文件的某幾行(中間幾行或最后幾行)
- cat filename | tail -n +3000 | head -n 1000
- tail -n 1000:顯示最后1000行
- tail -n +1000:從1000行開始顯示,顯示1000行以后的
- head -n 1000:顯示前面1000行
12. Inode
https://blog.csdn.net/Csoap2/article/details/87706737
- 定義:儲(chǔ)存文件元信息的區(qū)域就叫做inode溢豆,中文譯名為"索引節(jié)點(diǎn)"蜒简。
- 內(nèi)容:inode包含文件的元信息,具體來說有以下內(nèi)容:
- 文件的字節(jié)數(shù)
- 文件擁有者的User ID
- 文件的Group ID
- 文件的讀沫换、寫臭蚁、執(zhí)行權(quán)限
- 文件的時(shí)間戳,共有三個(gè):ctime指inode上一次變動(dòng)的時(shí)間讯赏,mtime指文件內(nèi)容上一次變動(dòng)的時(shí)間垮兑,atime指文件上一次打開的時(shí)間。
- 鏈接數(shù)漱挎,即有多少文件名指向這個(gè)inode
- 文件數(shù)據(jù)block的位置
可以用stat命令系枪,查看某個(gè)文件的inode信息:stat example.txt】牧拢總之私爷,除了文件名以外的所有文件信息雾棺,都存在inode之中。至于為什么沒有文件名衬浑,下文會(huì)有詳細(xì)解釋捌浩。
13. 臨界區(qū),互斥量工秩,信號(hào)量和事件之間的區(qū)別
四種進(jìn)程或線程同步互斥的控制方法
- 臨界區(qū):通過對多線程的串行化來訪問公共資源或一段代碼尸饺,速度快,適合控制數(shù)據(jù)訪問助币。
- 互斥量:為協(xié)調(diào)共同對一個(gè)共享資源的單獨(dú)訪問而設(shè)計(jì)的浪听。
- 信號(hào)量:為控制一個(gè)具有有限數(shù)量用戶資源而設(shè)計(jì)。
- 事 件:用來通知線程有一些事件已發(fā)生眉菱,從而啟動(dòng)后繼任務(wù)的開始迹栓。
14. 套接字阻塞和非阻塞
??非阻塞模式套接字與阻塞模式套接字相比,不容易使用俭缓。使用非阻塞模式套接字克伊,需要編寫更多的代碼,以便在每個(gè)Windows Sockets API函數(shù)調(diào)用中尔崔,對收到的WSAEWOULDBLOCK錯(cuò)誤進(jìn)行處理答毫。因此,非阻塞套接字便顯得有些難于使用季春。
??但是洗搂,非阻塞套接字在控制建立的多個(gè)連接,在數(shù)據(jù)的收發(fā)量不均载弄,時(shí)間不定時(shí)耘拇,明顯具有優(yōu)勢。這種套接字在使用上存在一定難度宇攻,但只要排除了這些困難惫叛,它在功能上還是非常強(qiáng)大的。通常情況下逞刷,可考慮使用套接字的“I/O模型”嘉涌,它有助于應(yīng)用程序通過異步方式,同時(shí)對一個(gè)或多個(gè)套接字的通信加以管理夸浅。