請(qǐng)談一談,系統(tǒng)如何提高并發(fā)性?
考察:操作系統(tǒng)綜合性
參考回答:
1、提高CPU并發(fā)計(jì)算能力
(1)多進(jìn)程&多線(xiàn)程
(2)減少進(jìn)程切換,使用線(xiàn)程,考慮進(jìn)程綁定CPU
(3)減少使用不必要的鎖,考慮無(wú)鎖編程
(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
定位有問(wèn)題的線(xiàn)程可以用如下命令
ps -mp pid -o THREAD,tid,time | more
2、查看JAVA進(jìn)程的每個(gè)線(xiàn)程的CPU占用率
ps -Lp 5798 cu | more # 5798是查出來(lái)進(jìn)程PID
3、追蹤線(xiàn)程,查看負(fù)載過(guò)高的原因,使用JDK下的一個(gè)工具
jstack 5798 # 5798是PID
jstack -J-d64 -m 5798 # -j-d64指定64為系統(tǒng)
jstack 查出來(lái)的線(xiàn)程ID是16進(jìn)制,可以把輸出追加到文件,導(dǎo)出用記事本打開(kāi),再根據(jù)系統(tǒng)中的線(xiàn)程ID去搜索查看該ID的線(xiàn)程運(yùn)行內(nèi)容,可以和開(kāi)發(fā)一起排查。
請(qǐng)談一談,什么情況下會(huì)發(fā)生死鎖?解決死鎖的策略有哪些?
考察點(diǎn):死鎖
參考回答:
(一)互斥條件:一個(gè)資源一次只能被一個(gè)進(jìn)程訪問(wè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)系。
解決方法:銀行家算法