1.如果一個硬盤 IO 時阻塞了,會發生什么情況?
- 進程/線程掛起:發起I/O操作的進程或線程會被操作系統置為阻塞狀態(等待狀態),直到I/O完成。
- CPU資源釋放:阻塞的線程會讓出CPU,操作系統會調度其他就緒的線程運行。
2.一般會通過 free 去查看內存使用率,執行 free 以后里面有好幾個指標,對于 buffer 和 cache 你是怎么理解的?
f'ree顯示了系統中物理內存和交換內存的情況。
Buffer和cache是linux內核為了提高磁盤I/O性能而使用的內存區域。
Buffer:主要用于存儲文件系統的元數據,例如inode和塊設備的數據。
Cache:用于緩存文件的實際數據內容
3.如果說某個服務CPU負載過高,你怎么排查?
- 使用系統監控工具如top,htop,vmstat等查看當前系統的CPU使用情況。
- 對于高CPU進程,可以使用pidstat -t查看確定是哪個線程導致了高負載,會不會是某些函數或者是循環導致的。
- 外部依賴:如果CPU負載是由外部依賴引起的,比如數據庫查詢或網絡請求,需要檢查這些操作是否必要。對于數據庫查詢,可以通過添加索引,重寫SQL語句來提高查詢效率。對于網絡請求,可以使用緩存或批量處理以減少請求次數。
4.502和504的區別?
它們都是HTTP狀態碼,但它們表示不同的服務器問題。502錯誤意味著中間代理服務器(如負載均衡服務器或反向代理)從后端服務器接收到一個無效響應,504錯誤則表示中間代理服務器沒有在規定時間內從后端服務器收到任何響應。