請(qǐng)談一談,系統(tǒng)如何提高并發(fā)性外构?
考察:操作系統(tǒng)綜合性
參考回答:
1剃毒、提高CPU并發(fā)計(jì)算能力
(1)多進(jìn)程&多線程
(2)減少進(jìn)程切換樊拓,使用線程,考慮進(jìn)程綁定CPU
(3)減少使用不必要的鎖妥衣,考慮無鎖編程
(4)考慮進(jìn)程優(yōu)先級(jí)
(5)關(guān)注系統(tǒng)負(fù)載
2皂吮、改進(jìn)I/O模型
(1)DMA技術(shù)
(2)異步I/O
(3)改進(jìn)多路I/O就緒通知策略,epoll
(4)Sendfile
(5)內(nèi)存映射
(6)直接I/O
請(qǐng)你解釋一下税手,通常系統(tǒng)CPU比較高是什么原因蜂筹?
考察點(diǎn):處理機(jī)
參考回答:
1、首先查看是哪些進(jìn)程的CPU占用率最高(如下可以看到詳細(xì)的路徑)
ps -aux --sort -pcpu | more
定位有問題的線程可以用如下命令
ps -mp pid -o THREAD,tid,time | more
2芦倒、查看JAVA進(jìn)程的每個(gè)線程的CPU占用率
ps -Lp 5798 cu | more # 5798是查出來進(jìn)程PID
3艺挪、追蹤線程,查看負(fù)載過高的原因兵扬,使用JDK下的一個(gè)工具
jstack 5798 # 5798是PID
jstack -J-d64 -m 5798 # -j-d64指定64為系統(tǒng)
jstack 查出來的線程ID是16進(jìn)制麻裳,可以把輸出追加到文件,導(dǎo)出用記事本打開器钟,再根據(jù)系統(tǒng)中的線程ID去搜索查看該ID的線程運(yùn)行內(nèi)容津坑,可以和開發(fā)一起排查。
請(qǐng)談一談傲霸,什么情況下會(huì)發(fā)生死鎖疆瑰?解決死鎖的策略有哪些眉反?
考察點(diǎn):死鎖
參考回答:
(一)互斥條件:一個(gè)資源一次只能被一個(gè)進(jìn)程訪問。即某個(gè)資源在一段時(shí)間內(nèi)只能由一個(gè)進(jìn)程占有穆役,不能同時(shí)被兩個(gè)或兩個(gè)以上的進(jìn)程占 有寸五。這種獨(dú)占資源如CD-ROM驅(qū)動(dòng)器,打印機(jī)等等耿币,必須在占有該資源的進(jìn)程主動(dòng)釋放它之后梳杏,其它進(jìn)程才能占有該資源。這是由資源本身的屬性所決定的淹接。
(二)請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí)秘狞,對(duì)已獲得的資源保持不放。進(jìn)程至少已經(jīng)占有一個(gè)資源蹈集,但又申請(qǐng)新的資源;由于該資源已被另外進(jìn)程占有雇初,此時(shí)該進(jìn)程阻塞拢肆;但是,它在等待新資源之時(shí)靖诗,仍繼續(xù)占用已占有的資源郭怪。
(三)不剝奪條件:進(jìn)程已經(jīng)獲得的資源,在未使用完之前不能強(qiáng)行剝奪刊橘,而只能由該資源的占有者進(jìn)程自行釋放鄙才。
(四)循環(huán)等待條件:若干資源形成一種頭尾相接的循環(huán)等待資源關(guān)系。
解決方法:銀行家算法