Web後臺開發中遇到的問題五花八門,分析問題涉及到的方方面面挺多的,不容易下手。本文分享工作中遇到的一些解決問題的方法僅供參考。如果您有好方法和案例,歡迎分享。
1一些系統知識
- ulimit -a裏的各種限制,特別是open files和core file size
- 共享內存大小受/proc/sys/kernel/shmmax控制
- 32位OS下默認寫文件超過2G會coredump,可通過定義宏來解決
- 32位OS下,受低端內存大小(800M,所有進程共享)的影響,單機socket大概超過9~10萬會產生OOM(Out of Memory),系統會殺掉些進程,而且還沒有coredump。可查閱slabinfo和slabtop。
- 網卡收發數據包會產生軟中斷,一般會綁定到CPU0處理。這就決定了網卡收發包的性能有限。在KM上看到有提到過用多網卡提高網絡吞吐量的做法。
- 物理內存不夠用時會使用到交換分區,很影響系統性能
- socket有內核緩衝區,緩衝區的大小對網絡收發包
- 讀寫文件時系統可以合併磁盤IO操作,這個可以通過iostat -x看到。讀寫文件越分散,合併率越低。
linux內核、TCP/IP、DB這類知識瞭解越多,解決問題越順手!
2常用工具
- strace:查看進程的系統調用
- ltrace:查看進程的庫函數調用
- lsof:查看系統已打開的文件句柄
- netstat:查看網絡信息
- tcpdump:抓包工具
- top:查看CPU和Load
- uptime:查看系統運行時間和Load
- iostat:磁盤IO統計
- ulimit:查看進程的系統資源限制
- free:查看內存和交換分區
- mpstat:查看中斷分佈情況
- gprof:性能分析工具
- gdb:調試工具
3日誌和信息
- /proc:查看或修改系統信息和配置,上面的命令有不少就是讀寫/proc下的文件。不少網絡參數都可以通過這裏修改(本地端口範圍、讀寫緩衝區大小、TIME_WAIT)
- /proc/PID/:查看進程的相關信息
- /var/log/messages:查看系統及內核日誌
- apache訪問日誌和錯誤日誌
- mysql的binlog
4查找規律
對業務產生的日誌和統計數據,有時需要分析其中的規律,纔好找到問題。可以從用戶IP、來源IP、目標IP、時間、業務ID、號段特徵這些方面來尋找。另外需要注意,沒有規律也是一種規律。