原因:
一個測試環境,nginx+php-fpm對外提供服務,測試人員訪問的時候出現時快時慢的情況,慢時超過了正常網頁的等待打開時間範圍。重啓nginx php-fpm後恢復,訪問幾次後又會慢
查找思路:
1,系統負載,磁盤IO
top,查看負載,負載小於1 排除。
vmstat 查看磁盤io 測試環境 io較小,排除。
2,是否有php慢查詢程序
打開php-fpm中php慢查詢日誌
request_slowlog_timeout = 5
slowlog = var/log/slow.log
reload 訪問之後無慢查詢日誌,判斷無執行時間比較慢的php程序
檢查該配置文件
pm = static
pm.max_children = 300
pm.start_servers = 15
pm.min_spare_servers = 8
pm.max_spare_servers = 48
request_terminate_timeout = 200
排除是pm.max_children 設置過小引起的問題。
3,懷疑mysql有慢查詢
網站時快時慢 重啓之後打開統一頁面較快,排除mysql有慢查詢。此時陷入迷茫尷尬之中。
查看nginx配置文件
worker_rlimit_nofile 65535 偶然發現多麼熟悉的數字,此處定義了限制打開的文件數量,就聯想到ulimit 參數
ulimit -n 果然 沒有進行優化,顯示默認的1024
echo
'* - nofile 65535'
>> /etc/security/limits.conf
然後執行下ulimit -HSn
65535
也可以把ulimit -SHn 65535命令加入到/etc/rc.local,然後每次重啓生效
文件描述符
文件描述符在形式上是一個非負整數。實際上,它是一個索引值,指向內核爲每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時,內核向進程返回一個文件描述符。在程序設計中,一些涉及底層的程序編寫往往會圍繞着文件描述符展開。但是文件描述符這一概念往往只適用於Unix、Linux這樣的操作系統。
習慣上,標準輸入(standard input)的文件描述符是 0,標準輸出(standard output)是 1,標準錯誤(standard error)是 2。儘管這種習慣並非Unix內核的特性,但是因爲一些 shell 和很多應用程序都使用這種習慣,因此,如果內核不遵循這種習慣的話,很多應用程序將不能使用。
調整完之後訪問時快時慢的問題解決。