☆技術(shù)問答集錦(四)

2 TCP 與 UDP

  1. 網(wǎng)絡層:IP協(xié)議需五、ICMP協(xié)議、ARP協(xié)議轧坎、RARP協(xié)議和BOOTP協(xié)議宏邮;
  2. 傳輸層:TCP協(xié)議與UDP協(xié)議;
  3. 應用層:FTP缸血、HTTP蜜氨、TELNET、SMTP捎泻、DNS等協(xié)議飒炎;

HTTP是應用層協(xié)議,其傳輸都是被包裝成TCP協(xié)議傳輸笆豁±赏簦可以用SOCKET實現(xiàn)HTTP。

Socket是一組接口闯狱,可以實現(xiàn)TCP煞赢,也可以實現(xiàn)UDP。在設計模式中哄孤,Socket其實就是一個門面模式耕驰,它把復雜的TCP/UDP協(xié)議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部朦肘,讓Socket去組織數(shù)據(jù)饭弓,以符合指定的協(xié)議。

網(wǎng)絡協(xié)議結(jié)構(gòu)
  1. TCP --- 傳輸控制協(xié)議媒抠,提供的是面向連接弟断、可靠的字節(jié)流服務。當客戶和服務器彼此交換數(shù)據(jù)前趴生,必須先在雙方之間建立一個TCP連接阀趴,之后才能傳輸數(shù)據(jù)。TCP提供超時重發(fā)苍匆,丟棄重復數(shù)據(jù)刘急,檢驗數(shù)據(jù),流量控制等功能浸踩,保證數(shù)據(jù)能從一端傳到另一端叔汁。 理想狀態(tài)下,TCP連接一旦建立检碗,在通信雙方中的任何一方主動關(guān)閉連接前据块,TCP 連接都將被一直保持下去。斷開連接時服務器和客戶端均可以主動發(fā)起斷開TCP連接的請求折剃。

  2. UDP --- 用戶數(shù)據(jù)報協(xié)議另假,是一個無連接的簡單的面向數(shù)據(jù)報的運輸層協(xié)議。UDP不提供可靠性怕犁,它只是把應用程序傳給IP層的數(shù)據(jù)包發(fā)送出去边篮,但是并不能保證它們能到達目的地。由于UDP在傳輸數(shù)據(jù)包前不用在客戶和服務器之間建立一個連接奏甫,且沒有超時重發(fā)等機制苟耻,故而傳輸速度很快。

  3. TCP連接的三次握手:要了解TCP扶檐,一定要知道 "三次握手凶杖,四次拜拜"
    所謂的三次握手,就是發(fā)送數(shù)據(jù)前必須建立的連接叫三次握手款筑,握手完了才開始發(fā)的智蝠,這也就是面向連接的意思。

  1. 第一次握手:客戶端發(fā)送syn包(syn=j)到服務器奈梳,并進入SYN_SEND狀態(tài)杈湾,等待服務器確認;
  2. 第二次握手:服務器收到syn包攘须,必須確認客戶的SYN(ack=j+1)漆撞,同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態(tài)浮驳;
  3. 第三次握手:客戶端收到服務器的SYN+ACK包悍汛,向服務器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢至会,客戶端和服務器進入ESTABLISHED狀態(tài)离咐,完成三次握手。

3 Java Thread

程序:是一段靜態(tài)代碼奉件,它是應用軟件執(zhí)行的藍本宵蛀。

進程:是程序運行時的一個實例,對應了從代碼加載县貌、執(zhí)行的一個完整過程术陶,此過程也對應進程產(chǎn)生、發(fā)展到消亡的過程煤痕。

線程:比進程更小的執(zhí)行單位梧宫,一個進程在其執(zhí)行過程中,可以產(chǎn)生多個執(zhí)行線程杭攻,即每個線程也有它的產(chǎn)生祟敛、發(fā)展到消亡的過程疤坝。是一個動態(tài)概念兆解。

  1. 粒度層次不同,是兩個不同層次上的概念跑揉。進程是由操作系統(tǒng)來管理的锅睛,而線程則是由進程來管理。
  2. 共享資源不同历谍,不同進程的代碼现拒、內(nèi)部數(shù)據(jù)和狀態(tài)都是完全獨立的,而一個進程內(nèi)的多線程是共享進程空間資源的望侈,有可能互相影響印蔬。
  3. 切換效率不同,線程本身的數(shù)據(jù)通常只有寄存器數(shù)據(jù)脱衙,以及一個進程執(zhí)行時使用的堆棧侥猬,所以線程比進程切換負擔小。

3.1 Thread生命周期及狀態(tài)模型

線程生命周期

3.2 Thread 常用方法

  1. Thread:

public static Thread currentThread( ):返回當前線程對象捐韩,是一個靜態(tài)的方法退唠。

public static void sleep( long millis):使當前線程進入睡眠狀態(tài),參數(shù)設定其等待時間荤胁,不會釋放鎖瞧预,靜態(tài)方法。

public static void yield():使當前線程放棄執(zhí)行,切換到其它線程垢油,是一個靜態(tài)方法盆驹。

  1. Thread Instance:

public void start():啟動線程,JVM將調(diào)用此線程的run方法秸苗,結(jié)果是將同時運行兩個線程召娜,當前線程和執(zhí)行run方法的線程。

public void run():Thread的子類應該重寫此方法惊楼,內(nèi)容應為該線程應執(zhí)行的任務玖瘸。

public void stop():停止線程運行,并退出可執(zhí)行狀態(tài)檀咙。 【已過時】

public void resume():將暫停的線程繼續(xù)執(zhí)行雅倒。【已過時】

public void suspend():使線程暫停執(zhí)行弧可,不退出可執(zhí)行態(tài)蔑匣。【已過時】

public void interrupt():中斷線程棕诵。

public void join():在當前線程中加入調(diào)用join方法的線程A裁良,直到線程A死亡才能繼續(xù)執(zhí)行當前線程。

public void join(long millis):在當前線程中加入調(diào)用join方法的線程A校套,直到到達參數(shù)指定的毫秒數(shù)或線程A死亡才能繼續(xù)執(zhí)行當前線程价脾。

public void setPriority(int newPriority):設置線程優(yōu)先級。

public void setDaemon(boolean on):設置是否為后臺線程笛匙。如果當前運行線程均為后臺線程則JVM停止運行侨把。該方法必須在start()方法之前使用。

public final void checkAccess():判斷當前線程是否有權(quán)力修改調(diào)用此方法的線程妹孙。

public boolean isAlive():判斷線程是否處于執(zhí)行狀態(tài)秋柄。返回值true表示處于運行狀態(tài),false表示已停止蠢正。

  1. Object:

public void wait():在其他線程調(diào)用此對象的notify()方法或notifyAll() 方法前骇笔,使當前線程進入等待狀態(tài),會釋放鎖嚣崭。

public void notify(): 喚醒在此對象監(jiān)視器上等待的單個線程笨触。

public void notifyAll():喚醒在此對象監(jiān)視器上等待的所有線程。

3.3 main() 主線程與子線程

  1. 主線程:Java應用程序總是從主類的main()方法開始執(zhí)行有鹿。當JVM加載代碼旭旭,發(fā)現(xiàn)main方法之后,啟動的線程稱作“主線程”葱跋,該線程負責執(zhí)行main方法持寄。
  2. 子線程:在main方法的執(zhí)行中再創(chuàng)建的線程源梭。

如果main方法中又創(chuàng)建了子線程,那么JVM就要在主線程和子線程之間輪流切換稍味,main方法即使執(zhí)行完最后的語句废麻,JVM也不會結(jié)束程序,JVM一直要等到程序中的所有線程都結(jié)束之后模庐,才結(jié)束我們的Java應用程序烛愧。

3.4 Thread 線程創(chuàng)建兩種方法

  1. Thread類:Thread類的子類創(chuàng)建線程對象,子類重寫Thread類中的run()方法掂碱;

    在Java程序中創(chuàng)建多線程的方法之一是繼承Thread類怜姿,從Thread類派生一個子類,并創(chuàng)建這個子類的對象疼燥,就可以產(chǎn)生一個新的線程沧卢。這個子類應該重寫Thread類的run方法,在run方法中寫入需要在新線程中執(zhí)行的語句段醉者。這個子類的對象需要調(diào)用start方法來啟動但狭,新線程等待CPU調(diào)度將自動進入run方法。當前線程將同時繼續(xù)往下執(zhí)行撬即。

    當創(chuàng)建子類的多個線程對象時立磁,其成員變量和run()方法中局部變量都是互不干擾的

  2. Runnable接口:使用Thread類直接創(chuàng)建線程對象剥槐,但需要傳入實現(xiàn)Runable接口的目標對象唱歧。

    在編寫復雜程序時相關(guān)的類可能已經(jīng)繼承了某個基類,而Java不支持多繼承才沧,在這種情況下迈喉,便需要通過實現(xiàn)Runnable接口來生成多線程绍刮。

    使用Thread創(chuàng)建線程對象時温圆,通常使用的構(gòu)造方法是:Thread(Runnable target),該構(gòu)造方法中的參數(shù)是一個Runnable類型的接口孩革,因此,在創(chuàng)建線程對象時必須向構(gòu)造方法的參數(shù)傳遞一個實現(xiàn)Runnable接口類的實例,該實例對象稱作所創(chuàng)線程的目標對象寞焙。

    當線程調(diào)用start方法后吕粗,一旦輪到它來享用CPU資源,目標對象就會自動調(diào)用接口中的run方法(接口回調(diào))饱搏。

    對于使用同一目標對象的線程非剃,目標對象的成員變量自然就是這些線程的共享數(shù)據(jù)單元。不同run()方法中的局部變量互不干擾推沸。

3.5 Thread 同步

synchronized —— 線程同步關(guān)鍵字

把需要修改數(shù)據(jù)的方法用關(guān)鍵字synchronized來修飾备绽,用于指定需要同步的代碼段或方法券坞,也就是監(jiān)視區(qū)。

當一個線程A使用一個synchronized修飾的方法時肺素,其他線程想使用這個方法時就必須等待恨锚,直到線程A 使用完該方法 (除非線程A使用wait主動讓出CUP資源)。

當被synchronized限定的代碼段執(zhí)行完倍靡,就釋放對象鎖(信號量)猴伶。

3.6 Thread 通信

為了更有效地協(xié)調(diào)不同線程的工作,需要在線程間建立溝通渠道塌西,通過線程間的“對話”來解決線程間的同步問題他挎。

java.lang.Object 類的一些方法為線程間的通訊提供了有效手段。

一個線程在使用的同步方法中時捡需,可能根據(jù)問題的需要雇盖,必須使用wait() (掛起)方法使本線程等待,暫時讓出CPU的使用權(quán)栖忠,并允許其它線程使用這個同步方法崔挖。其它線程如果在使用這個同步方法時如果不需要等待,那么它用完這個同步方法的同時庵寞,應當執(zhí)行notify(), notifyAll()(恢復)方法通知所有的由于使用這個同步方法而處于等待的線程結(jié)束等待狸相。

3.7 Thread 調(diào)度機制

每個Java線程都有一個優(yōu)先級,其范圍都在1和10之間捐川。 默認情況下脓鹃,每個線程的優(yōu)先級都設置為5

在線程A運行過程中創(chuàng)建的新的線程對象B古沥,初始狀態(tài)具有和線程A相同的優(yōu)先級瘸右。可在線程創(chuàng)建之后的任何時候岩齿,通過setPriority(int priority)方法改變其原來的優(yōu)先級太颤。

基于線程優(yōu)先級的線程調(diào)度:

  1. 具有較高優(yōu)先級的線程比優(yōu)先級較低的線程優(yōu)先執(zhí)行;
  2. 對具有相同優(yōu)先級的線程盹沈,Java的處理是隨機的龄章;
  3. 底層操作系統(tǒng)支持的優(yōu)先級可能要少于10個,這樣會造成一些混亂乞封。因此做裙,只能將優(yōu)先級作為一種很粗略的工具使用。最后的控制可以通過明智地使用yield()函數(shù)來完成肃晚;

假設某線程正在運行锚贱,則只有出現(xiàn)以下情況之一,才會使其暫停運行:

  1. 一個具有更高優(yōu)先級的線程變?yōu)榫途w狀態(tài)(Ready)关串;
  2. 由于輸入/輸出(或其他一些原因)拧廊、調(diào)用sleep杂穷、wait、yield方法使其發(fā)生阻塞卦绣;
  3. 對于支持時間分片的系統(tǒng)耐量,時間片的時間期滿;

通常滤港,我們在一個線程內(nèi)部插入yield()語句廊蜒,這個方法會使正在運行的線程暫時放棄執(zhí)行,這時具有同樣優(yōu)先級的線程就有機會獲得調(diào)度開始運行溅漾,但較低優(yōu)先級的線程仍將被忽略不參加調(diào)度山叮;

3.8 Thread 掛起與恢復

掛起 有時候兩個線程并不是同步的,即不涉及都需要調(diào)用一個同步方法添履,但線程也可能需要暫時的掛起屁倔。所謂掛起一個線程就是讓線程暫時讓出CPU的使用權(quán)限,暫時停止執(zhí)行暮胧,但停止執(zhí)行的持續(xù)時間不確定锐借,因此不能使用sleep方法暫停線程。掛起一個線程需使用wait方法往衷,即讓準備掛起的線程調(diào)用 wait 方法钞翔,主動讓出CPU的使用權(quán)限

恢復 為了恢復該線程席舍,其它線程在占有CUP資源期間布轿,讓掛起的線程的目標對象執(zhí)行notifyAll()方法,使得掛起的線程繼續(xù)執(zhí)行来颤;如果線程沒有目標對象汰扭,為了恢復該線程,其它線程在占有CPU資源期間福铅,讓掛起的線程調(diào)用notifyAll()方法萝毛,使掛起的線程繼續(xù)執(zhí)行。

4 Java數(shù)據(jù)結(jié)構(gòu)

  1. 線性表結(jié)構(gòu)一般分為三種:順序線性表本讥、單鏈表珊泳、雙鏈表鲁冯;特征:

    1. 一個特定的線性表拷沸,應該是用來存放特定的某一個類型的元素的( 元素的“同一性”);
    2. 除第一個元素外薯演,其他每一個元素 有且僅有一個直接前驅(qū)撞芍;除最后一個元素外,其他每一個元素 有且僅有一個直接后繼元素的“序偶性”)跨扮;
    3. 元素在線性表中的“下標” 唯一地確定該元素在表中的相對位置( 元素的“索引性”)序无;
  2. 二叉樹是樹形結(jié)構(gòu)的一個重要類型验毡。許多實際問題抽象出來的數(shù)據(jù)結(jié)構(gòu)往往是二叉樹的形式,即使是一般的樹也能簡單地轉(zhuǎn)換為二叉樹帝嗡,而且二叉樹的存儲結(jié)構(gòu)及其算法都較為簡單晶通,因此二叉樹顯得特別重要。

    二叉樹(BinaryTree)是n(n≥0)個結(jié)點的有限集哟玷,它或者是空集(n=0)狮辽,或者由一個根結(jié)點及兩棵互不相交的、分別稱作這個根的左子樹和右子樹的二叉樹組成巢寡。這個定義是遞歸的喉脖。由于左、右子樹也是二叉樹抑月, 因此子樹也可為空樹树叽。

    二叉樹遍歷:由于被訪問的結(jié)點必是某子樹的根,所以N(Node)谦絮、L(Left subtlee)和R(Right subtree)又可解釋為根题诵、根的左子樹和根的右子樹。NLR层皱、LNR和LRN分別又稱為 先根遍歷仇轻、中根遍歷和后根遍歷

  3. 隊列是一個常用的數(shù)據(jù)結(jié)構(gòu)奶甘,是一種 先進先出(First In First Out, FIFO)的結(jié)構(gòu)篷店,也就是說只能在表頭進行刪除,在表尾進行添加臭家。

  4. 棧是一種 后進先出(Last In First Out疲陕,LIFO)的數(shù)據(jù)結(jié)構(gòu)。

5 JDK命令行工具

jps : 只用于列出java的進程钉赁。

jstat :可用于觀察Java應用程序運行時信息的工具蹄殃。

jinfo :可用于查看正在運行的Java應用程序的擴展參數(shù),甚至支持在運行時修改部分參數(shù)你踩。

jmap :生成Java應用程序的堆快照和對象的統(tǒng)計信息诅岩。jmap -histo 2972 > heap.log

jhat :用于分析Java應用程序的堆快照內(nèi)容文件。jhat heap.log

jstack : 用于導出Java應用程序的線程堆棧带膜。 jstack -l 2348 > jstack.log

6 靜態(tài)代理和動態(tài)代理

  1. 靜態(tài)代理:由程序員創(chuàng)建或工具生成代理類的源碼吩谦,再編譯代理類。所謂靜態(tài)也就是在程序運行前就已經(jīng)存在代理類的字節(jié)碼文件膝藕,代理類和委托類的關(guān)系在編譯期就確定了式廷。

  2. 動態(tài)代理:動態(tài)代理類的源碼是在程序運行期間由JVM根據(jù)反射等機制動態(tài)的生成,所以不存在代理類的字節(jié)碼文件芭挽。代理類和委托類的關(guān)系是在程序運行期確定滑废。

7 Http基礎(chǔ)

7.1 HTTP協(xié)議

一種通信協(xié)議蝗肪,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。 一個屬于應用層的面向?qū)ο蟮膮f(xié)議蠕趁,由于其簡捷薛闪、快速的方式,適用于分布式超媒體信息系統(tǒng)俺陋。

HTTP協(xié)議的主要特點如下:

  1. 支持客戶/服務器模式逛绵,基于TCP實現(xiàn);
  2. 簡單快速:客戶向服務器請求服務時倔韭,只需傳送請求方法和路徑术浪。請求方法常用的有GET、POST寿酌、DELETE胰苏、PUT。每種方法規(guī)定了客戶與服務器聯(lián)系的類型不同醇疼。由于HTTP協(xié)議簡單硕并,使得HTTP服務器的程序規(guī)模小,因而通信速度很快秧荆;
  3. 靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對象倔毙。正在 傳輸?shù)念愋陀?/strong> Content-Type 加以標記
  4. 短連接:短連接的含義是限制每次連接只處理一個請求乙濒。服務器處理完客戶的請求陕赃,并收到客戶的應答后,即斷開連接颁股。采用這種方式可以節(jié)省傳輸時間么库。
  5. 無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務處理沒有記憶能力甘有。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息诉儒,則它必須重傳,這樣可能導致每次連接傳送的數(shù)據(jù)量增大亏掀。另一方面忱反,在服務器不需要先前信息時它的應答就較快。

7.2 CGI是什么

CGI(Common Gateway Interface),通用網(wǎng)關(guān)接口,它是一段程序,運行在服務器上如:HTTP服務器滤愕,提供同客戶端HTML頁面的接口温算。利用程序的標準輸入輸出流,完成HTTP通信该互。HTTP 是文本協(xié)議米者,每次請求的文本以標準輸入流的形式進入服務器端 CGI 程序,創(chuàng)建進程宇智;然后進程的標準輸出流作為響應蔓搞。

CGI程序可以是Python腳本,PERL腳本随橘,SHELL腳本喂分,C或者C++程序等。 所有服務器端 HTTP 處理都是類 CGI 的原理机蔗,接受符合協(xié)議的標準輸入文本流蒲祈,從標準輸出流輸出同樣符合協(xié)議的文本,也就是“請求”和“響應”萝嘁。

7.3 負載均衡梆掸、分布式集群

在負載均衡的思路下,多臺服務器為對等方式牙言,每臺服務器都具有同等的地位酸钦,可以單獨對外提供服務而無須其他服務器的輔助。通過負載分擔技術(shù)咱枉,將外部發(fā)送來的請求按一定規(guī)則分配到對稱結(jié)構(gòu)中的某一臺服務器上卑硫,而接收到請求的服務器都獨立回應客戶機的請求。

常用負載均衡技術(shù):反向代理負載均衡 (如Apache+JK2+Tomcat這種組合)蚕断,使用代理服務器可以將請求轉(zhuǎn)發(fā)給內(nèi)部的Web服務器欢伏,讓代理服務器將請求均勻地轉(zhuǎn)發(fā)給多臺內(nèi)部Web服務器之一上,從而達到負載均衡的目的亿乳。這種代理方式與普通的代理方式有所不同硝拧,標準代理方式是客戶使用代理訪問多個外部Web服務器,而這種代理方式是多個客戶使用它訪問內(nèi)部Web服務器葛假,因此也被稱為反向代理模式河爹。

客戶系統(tǒng)一般采用Apache httpd作為web服務器,即作為Tomcat的前端處理器桐款,根據(jù)具體情況而定咸这,有些情況下是不需要Apache httpd作為 web 服務器的,如系統(tǒng)展現(xiàn)沒有靜態(tài)頁面那就不需要Apache httpd魔眨,那時可以直接使用Tomcat作為web服務器來使用媳维。使用Apache httpd主要是它在處理靜態(tài)頁面方面的能力比Tomcat強多了。

會話親和:就是表示來自同會話的所有請求都由相同的 Tomcat 實例來處理遏暴,這種情況下侄刽,如果Tomcat實例或所執(zhí)行的服務器機器失效,也會喪失Servlet的會話數(shù)據(jù)朋凉。即使在集群系統(tǒng)中執(zhí)行更多的Tomcat實 例州丹,也永遠不會復制會話數(shù)據(jù)。這樣是提高集群性能的一種方案,但不具備有容錯能力了墓毒。

會話復制:只配置負載均衡還不行吓揪,還要 session 復制,也就是說其中任何一個 tomcat 的添加的 session 所计,是要同步復制到其它 tomcat 柠辞, 集群內(nèi)的 tomcat 都有相同的 session,使用會話復制主胧,則當一個Tomcat實例宕掉時叭首,由于至少還有另一個Tomcat實例保有一份會話狀態(tài)數(shù)據(jù),因而數(shù)據(jù)不會喪失踪栋。但性能會 有所降低焙格。

其實無論是分布式,數(shù)據(jù)緩存夷都,還是負載均衡眷唉,無非就是改善網(wǎng)站的性能瓶頸,在網(wǎng)站源碼不做優(yōu)化的情況下损肛,負載均衡可以說是最直接的手段了厢破。其實拋開這個名詞,放開了說治拿,就是希望用戶能夠分流摩泪,也就是說把所有用戶的訪問壓力分散到多臺服務器上,也可以分散到多個 tomcat里劫谅,如果一臺服務器裝多個tomcat见坑,那么即使是負載均衡,性能也提高不了太多捏检,不過可以提高穩(wěn)定性荞驴,即容錯性。當其中一個主tomcat 當?shù)艄岢牵渌膖omcat也可以補上熊楼,因為tomcat之間實現(xiàn)了Session共享。待tomcat服務器修復后再次啟動能犯,就會自動拷貝所有 session數(shù)據(jù)鲫骗,然后加入集群。這樣就可以不間斷的提供服務踩晶。如果要真正從本質(zhì)上提升性能执泰,必須要分布到多臺服務器。

8 Linux基礎(chǔ)

8.1 Linux啟動原理

CMOS:記錄 各項硬件參數(shù)且嵌入在主板上面的存儲器渡蜻;
BIOS:一個寫入到主板上的一個韌體(韌體就是寫入到硬件上的一個程序)术吝。BIOS就是在開機的時候計算機系統(tǒng)會主動執(zhí)行的第一個程序了计济。

  1. 首先加載BIOS程序排苍,通過BIOS程序去 加載CMOS信息,取得主機的各項硬件配置纪岁,并開始進行開機自檢则果,依據(jù)設置取得第一個可啟動的設備幔翰;
  2. 加載執(zhí)行第一個啟動設備內(nèi)MBR的Boot Loader
  3. 依據(jù)Boot Loader的 設置加載Kernel遗增,Kernel會開始檢測硬件與加載驅(qū)動程序款青;
  4. 在硬件驅(qū)動成功后做修, Kernel會主動調(diào)用init進程,而init會取得run-level信息抡草;
  5. init執(zhí)行 /etc/rc.d/rc.sysinit文件來準備軟件執(zhí)行的操作環(huán)境(如網(wǎng)絡,時區(qū)等)康震;
  6. init執(zhí)行 run-level的各個服務啟動(script方式);
  7. init執(zhí)行 /etc/rc.d/rc.local文件屏箍;
  8. init執(zhí)行 終端模擬程序mingetty來啟動login進程橘忱,最后就等待用戶登錄;

8.2 Linux命令行工具

top實時顯示系統(tǒng)中各個進程的資源占用狀況钝诚。前半部分是系統(tǒng)統(tǒng)計信息,后半部分是進程占用資源狀況信息潘拱。

sar周期性地對內(nèi)存和CPU使用情況進行采樣祈噪。查看CPU使用情況:sar -u 1 3;查看內(nèi)存使用情況:sar -r 1 3盔腔;查看I/O使用情況:sar -b 1 3

vmstat : 周期性地統(tǒng)計CPU 內(nèi)存 swap 使用情況等信息。vmstat 1 3

iostat : 周期性查看I/O信息弛随。iostat 1 2

pidstat:功能強大的性能檢測工具舀透, 不僅可以監(jiān)視進程的CPU,I/O愕够,內(nèi)存資源,也可以監(jiān)視線程的性能情況坠狡。

  1. 查看CPU使用情況: pidstat -p 1187 -u 1 3【-t 參數(shù)將系統(tǒng)性能的監(jiān)控細化到線程級別】
  2. 查看內(nèi)存使用情況: pidstat -p 1187 -r 1 3 【-t 參數(shù)將系統(tǒng)性能的監(jiān)控細化到線程級別】
  3. 查看I/O使用情況: pidstat -p 1187 -d 1 3 【-t 參數(shù)將系統(tǒng)性能的監(jiān)控細化到線程級別】

netstat用于查看各種網(wǎng)絡相關(guān)信息遂跟,如網(wǎng)絡連接,路由表凯亮,接口狀態(tài) (Interface Statistics)哄尔,masquerade 連接假消,多播成員 (Multicast Memberships) 等等。

netstat -na 來顯示所有連接的端口并用數(shù)字表示究飞。

mpstat用于獲取 CPU 相關(guān)統(tǒng)計信息亿傅。mpstat -P ALL 5 2 顯示了系統(tǒng)中 CPU 的各種統(tǒng)計信息。–P ALL 選項指示該命令顯示所有 CPU 的統(tǒng)計信息谅阿。參數(shù) 5 2 指示該命令每隔 5 秒運行一次酬滤,共運行 2 次。

pmap:report memory map of a process(查看進程的內(nèi)存映像信息)氯檐。

pmap -d 1

 -x   extended       Show the extended format. 顯示擴展格式

 -d   device         Show the device format.   顯示設備格式

 -q   quiet          Do not display some header/footer lines. 不顯示頭尾行

 -V   show version   Displays version of program. 顯示版本
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末体捏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子河泳,更是在濱河造成了極大的恐慌,老刑警劉巖薄霜,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惰瓜,死亡現(xiàn)場離奇詭異食拜,居然都是意外死亡副编,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門呻待,熙熙樓的掌柜王于貴愁眉苦臉地迎上來队腐,“玉大人柴淘,你說我怎么就攤上這事∥希” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵应民,是天一觀的道長诲锹。 經(jīng)常有香客問我涉馅,道長,這世上最難降的妖魔是什么庸诱? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮默勾,結(jié)果婚禮上聚谁,老公的妹妹穿的比我還像新娘。我一直安慰自己环疼,他們只是感情好朵耕,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伪阶,像睡著了一般处嫌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上檐薯,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天坛缕,我揣著相機與錄音捆昏,去河邊找鬼。 笑死屡立,一個胖子當著我的面吹牛膨俐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焚刺,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乳愉,長吁一口氣:“原來是場噩夢啊……” “哼屯远!你這毒婦竟也來了捕虽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤房揭,失蹤者是張志新(化名)和其女友劉穎捅暴,沒想到半個月后咧纠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡梧奢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年粹断,在試婚紗的時候發(fā)現(xiàn)自己被綠了嫡霞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片希柿。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖端姚,靈堂內(nèi)的尸體忽然破棺而出挤悉,到底是詐尸還是另有隱情,我是刑警寧澤昏鹃,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布洞渤,位于F島的核電站属瓣,受9級特大地震影響讯柔,放射性物質(zhì)發(fā)生泄漏护昧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一极祸、第九天 我趴在偏房一處隱蔽的房頂上張望怠晴。 院中可真熱鬧,春花似錦稿械、人聲如沸冲粤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽傀顾。三九已至,卻和暖如春寒砖,著一層夾襖步出監(jiān)牢的瞬間嫉拐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工漠嵌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盖呼,地道東北人塌计。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像章钾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贱傀,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容