操作系統
- Linux系統下你關注過哪些內核參數,說說你知道的
- centos 內核配置文件爲 /etc/sysctl.conf . 修改參數後啓用:sysctl -p
- net.ipv4.tcp_tw_reuse:允許將TIME-WAIT sockets重新用於新的TCP連接,默認爲0,表示關閉.
- net.ipv4.tcp_tw_recycle: 表示開啓TCP連接中TIME-WAIT sockets的快速回收,默認爲0,表示關閉
- net.ipv4.tcp_fin_timeout : 修改系統默認的 TIMEOUT 時間。
- Linux下IO模型有幾種,各自的含義是什麼。
- IO的本質是socket的讀取,數據先拷貝到內核的緩衝區中,然後拷貝到應用程序的地址空間
- 五種IO模型
- BIO:同步阻塞io
- NIO: 同步非阻塞io
- 多路複用io
- 信號驅動io:當數據準備完成之後,會主動的通知用戶進程數據已經準備完成,即對用戶進程做一個回調
- 異步io: 當用戶進程發起系統調用後,立刻就可以開始去做其它的事情,然後直到I/O執行的兩個階段(數據準備 和 數據複製)都完成之後,內核會給用戶進程發送通知,告訴用戶進程操作已經完成了。
- epoll和poll有什麼區別。
- select、poll、epoll 這三個函數式Linux系統中io複用的系統調用函數
- select的工作流程:
單個進程就可以同時處理多個網絡連接的io請求(同時阻塞多個io操作)。基本原理就是程序呼叫select,然後整個程序就阻塞了,這時候,kernel就會輪詢檢查所有select負責的fd,當找到一個client中的數據準備好了,select就會返回,這個時候程序就會系統調用,將數據從kernel複製到進程緩衝區 - poll的原理與select非常相似,poll是鏈式的,沒有最大連接數的限制
- select,poll實現需要自己不斷輪詢所有fd集合,直到設備就緒,期間可能要睡眠和喚醒多次交替
- select,poll每次調用都要把fd集合從用戶態往內核態拷貝一次,並且要把current往設備等待隊列中掛一次,而epoll只要一次拷貝,而且把current往等待隊列上掛也只掛一次
- select的工作流程:
- 平時用到哪些Linux命令。
- cd:切換工作目錄至指定‘目錄’
- ls:用來顯示目標列表
- ps -ef|grep java :查看java相關進程列表
- tail -100f xx.log:顯示文件最新追加的內容100行
- kill -9 進程號:強制終止指定‘進程號’
- top : 實時動態地查看系統的整體運行情況
- free -m 顯示當前系統未使用的和已使用的內存數目
- pwd : 以絕對路徑的方式顯示用戶當前工作目錄
- 用一行命令查看文件的最後五行。
- tail -n 5
- 用一行命令輸出正在運行的java進程。
- ps -ef|grep java
- 進程和線程的區別。
- 進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位
- 在操作系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(通過CPU調度,在每個時間片中只有一個線程執行)
- 系統在運行的時候會爲每個進程分配不同的內存空間;而對線程而言,除了CPU外,系統不會爲線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源。
- top 命令之後有哪些內容,有什麼作用
- 統計信息區
- 第一行:任務隊列信息,當前時間等
- 第二行:進程信息,進程總數,正在運行的進程數等
- 第三行:CPU信息,用戶控件所佔CPU百分比等
- 第四行:內存信息
- 第五行:swap信息,分區總量
- 進程信息區
- PID:進程id
- PPID:父進程id
- UID:進程所有者的id
- TIME:進程使用的CPU時間總計,單位秒
- top參數說明
- d: 指定每兩次屏幕信息刷新之間的時間間隔。當然用戶可以使用s交互命令來改變之。
- p: 通過指定監控進程ID來僅僅監控某個進程的狀態。
- q: 該選項將使top沒有任何延遲的進行刷新。如果調用程序有超級用戶權限,那麼top將以儘可能高的優先級運行。
- i: 使top不顯示任何閒置或者僵死進程。
- 線上CPU爆高,請問你如何找到問題所在。
- top 命令等位高CPU佔用應用的pid
- ps aux|grep pid 進一步確認應用
- 查詢顯示線程列表:ps -mp pid -o THREAD,tid,time
- 將需要的線程id 轉爲16進制格式:printf “%x\n” tid
- 打印線程堆棧信息 jstack pid |grep tid -A 30
- 定位到具體代碼