本文目錄一覽:
- 1、如何使用PHP實時監控Linux伺服器的cpu,內存,硬碟信息
- 2、升級php7.3 linux伺服器cpu 突然很高?
- 3、一個php-cgi佔用系統多大內存
- 4、linux系統怎麼查看內存和CPU佔用情況呀?
- 5、linux php-fpm進程佔用了多少內存
- 6、如何查看linux php-fpm.pid位置
如何使用PHP實時監控Linux伺服器的cpu,內存,硬碟信息
1,Linux下可以在/proc/cpuinfo中看到每個cpu的詳細信息。但是對於雙核的cpu,在cpuinfo中會看到兩個cpu。常常會讓人誤以為是兩個單核的cpu。
其實應該通過Physical
Processor
ID來區分單核和雙核。而Physical
Processor
ID可以從cpuinfo或者dmesg中找到.
flags
如果有
ht
說明
支持超線程技術
判斷物理CPU的個數可以查看physical
id
的值,相同則為同一個物理CPU
2,查看內存大小:
cat
/proc/meminfo
|grep
MemTotal
3,其他一些可以查看詳細
linux系統
信息的命令和方法:
uname
-a
#
查看內核/操作系統/
CPU信息
的linux系統信息命令
head
-n
1
/etc/issue
#
查看操作系統版本,是數字1不是字母L
cat
/proc/cpuinfo
#
查看CPU信息的linux系統信息命令
hostname
#
查看計算機名的linux系統信息命令
lspci
-tv
#
列出所有
PCI設備
lsusb
-tv
#
列出所有USB設備的linux系統信息命令
lsmod
#
列出載入的內核模塊
env
#
查看
環境變數
資源
free
-m
#
查看內存使用量和
交換區
使用量
df
-h
#
查看各分區使用情況
du
-sh
#
查看指定目錄的大小
grep
MemTotal
/proc/meminfo
#
查看內存總量
grep
MemFree
/proc/meminfo
#
查看空閑內存量
uptime
#
查看系統
運行時間
、用戶數、負載
cat
/proc/loadavg
#
查看系統負載磁碟和分區
mount
|
column
-t
#
查看掛接的分區狀態
fdisk
-l
#
查看所有分區
swapon
-s
#
查看所有
交換分區
hdparm
-i
/dev/hda
#
查看磁碟參數(僅適用於
IDE設備
)
dmesg
|
grep
IDE
#
查看啟動時IDE設備檢測狀況網路
ifconfig
#
查看所有網路介面的屬性
iptables
-L
#
查看防火牆設置
route
-n
#
查看
路由表
netstat
-lntp
#
查看所有監聽埠
netstat
-antp
#
查看所有已經建立的連接
netstat
-s
#
查看
網路統計
信息進程
ps
-ef
#
查看所有進程
top
#
實時顯示
進程狀態
用戶
w
#
查看活動用戶
id
#
查看指定用戶信息
last
#
查看
用戶登錄
日誌
cut
-d:
-f1
/etc/passwd
#
查看系統所有用戶
cut
-d:
-f1
/etc/group
#
查看系統所有組
crontab
-l
#
查看當前用戶的計劃任務服務
chkconfig
–list
#
列出所有系統服務
chkconfig
–list
|
grep
on
#
列出所有啟動的系統服務程序
rpm
-qa
#
查看所有安裝的軟體包
cat
/proc/cpuinfo
:查看CPU相關參數的linux系統命令
cat
/proc/partitions
:查看linux硬碟和分區信息的系統信息命令
cat
/proc/meminfo
:查看linux系統內存信息的linux系統命令
cat
/proc/version
:查看版本,類似uname
-r
cat
/proc/ioports
:查看設備io埠
cat
/proc/interrupts
:查看中斷
cat
/proc/pci
:查看pci設備的信息
cat
/proc/swaps
:查看所有swap分區的信息
升級php7.3 linux伺服器cpu 突然很高?
1、通過寶塔面板安裝的建站環境是LNMP,使用的Nginx 1.16.1、MySQL 5.5.62、PHP-7.0。2、優化PHP7.0設置。先進入到PHP7.0管理頁面。首先先安裝一個opcache緩衝器,用於加速PHP腳本,其他的就都按默認的來吧,畢竟安裝的擴展太多容易影響性能。修改max_execution_time時間為20.性能調整。這裡可以根據自己伺服器配置進行設置,寶塔面板比較人性化,會根據你的伺服器配置設置推薦方案。可以根據自己伺服器內存大小進行計算,一般一個php-fpm進程佔用內存30M左右,以1024MB內存1G內存)來計算,大概可以設置34個並發。使用的就是1核1G內存配置的伺服器,安裝寶塔面板後推薦的是40並發,用不到那麼高的並發,所以設置了20並發的方案,並把max_spare_servers數字調整成了14。
一個php-cgi佔用系統多大內存
在網上翻閱資料的時候會看到有人說一個php-cgi進程大約佔用系統內存20M,但是php-cgi佔用內存其實是與你的php.ini配置載入多少個.so(.dll)模塊相關的,我們在linux系統下查看,可以用pman的命令:
pmap $(pgrep php-cgi | head -1)
[root@Smile ~]# pmap $(pgrep php-cgi | head -1)
2830: /home/pubsrv/php/bin/php-cgi –fpm –fpm-config /home/pubsrv/php/etc/php-fpm.conf
0000000000400000 6852K r-x– /home/pubsrv/php/bin/php-cgi
0000000000cb1000 268K rw— /home/pubsrv/php/bin/php-cgi
0000000000cf4000 60K rw— [ anon ]
00000000016fd000 2216K rw— [ anon ]
0000003c24a00000 128K r-x– /lib64/ld-2.12.so (deleted)
0000003c24c1f000 4K r—- /lib64/ld-2.12.so (deleted)
0000003c24c20000 4K rw— /lib64/ld-2.12.so (deleted)
0000003c24c21000 4K rw— [ anon ]
0000003c24e00000 8K r-x– /lib64/libdl-2.12.so (deleted)
0000003c24e02000 2048K —– /lib64/libdl-2.12.so (deleted)
0000003c25002000 4K r—- /lib64/libdl-2.12.so (deleted)
0000003c25003000 4K rw— /lib64/libdl-2.12.so (deleted)
0000003c25200000 1576K r-x– /lib64/libc-2.12.so (deleted)
0000003c2538a000 2044K —– /lib64/libc-2.12.so (deleted)
0000003c25589000 16K r—- /lib64/libc-2.12.so (deleted)
0000003c2558d000 4K rw— /lib64/libc-2.12.so (deleted)
0000003c2558e000 20K rw— [ anon ]
0000003c25600000 92K r-x– /lib64/libpthread-2.12.so (deleted)
0000003c25617000 2048K —– /lib64/libpthread-2.12.so (deleted)
0000003c25817000 4K r—- /lib64/libpthread-2.12.so (deleted)
0000003c25818000 4K rw— /lib64/libpthread-2.12.so (deleted)
0000003c25819000 16K rw— [ anon ]
0000003c25a00000 28K r-x– /lib64/librt-2.12.so (deleted)
0000003c25a07000 2044K —– /lib64/librt-2.12.so (deleted)
0000003c25c06000 4K r—- /lib64/librt-2.12.so (deleted)
0000003c25c07000 4K rw— /lib64/librt-2.12.so (deleted)
0000003c25e00000 524K r-x– /lib64/libm-2.12.so (deleted)
0000003c25e83000 2044K —– /lib64/libm-2.12.so (deleted)
0000003c26082000 4K r—- /lib64/libm-2.12.so (deleted)
0000003c26083000 4K rw— /lib64/libm-2.12.so (deleted)
0000003c26200000 84K r-x– /lib64/libz.so.1.2.3 (deleted)
0000003c26215000 2044K —– /lib64/libz.so.1.2.3 (deleted)
0000003c26414000 4K r—- /lib64/libz.so.1.2.3 (deleted)
0000003c26415000 4K rw— /lib64/libz.so.1.2.3 (deleted)
0000003c26600000 116K r-x– /lib64/libselinux.so.1.#prelink#.YPfIAE (deleted)
0000003c2661d000 2044K —– /lib64/libselinux.so.1.#prelink#.YPfIAE (deleted)
0000003c2681c000 4K r—- /lib64/libselinux.so.1.#prelink#.YPfIAE (deleted)
0000003c2681d000 4K rw— /lib64/libselinux.so.1.#prelink#.YPfIAE (deleted)
0000003c2681e000 4K rw— [ anon ]
0000003c26a00000 928K r-x– /usr/lib64/libstdc++.so.6.0.13 (deleted)
0000003c26ae8000 2048K —– /usr/lib64/libstdc++.so.6.0.13 (deleted)
0000003c26ce8000 28K r—- /usr/lib64/libstdc++.so.6.0.13 (deleted)
0000003c26cef000 8K rw— /usr/lib64/libstdc++.so.6.0.13 (deleted)
0000003c26cf1000 84K rw— [ anon ]
0000003c26e00000 88K r-x– /lib64/libgcc_s-4.4.7-20120601.so.1;529c1fe4 (deleted)
0000003c26e16000 2044K —– /lib64/libgcc_s-4.4.7-20120601.so.1;529c1fe4 (deleted)
0000003c27015000 4K rw— /lib64/libgcc_s-4.4.7-20120601.so.1;529c1fe4 (deleted)
0000003c27200000 88K r-x– /lib64/libresolv-2.12.so (deleted)
0000003c27216000 2048K —– /lib64/libresolv-2.12.so (deleted)
0000003c27416000 4K r—- /lib64/libresolv-2.12.so (deleted)
0000003c27417000 4K rw— /lib64/libresolv-2.12.so (deleted)
0000003c27418000 8K rw— [ anon ]
0000003c27a00000 12K r-x– /lib64/libplds4.so (deleted)
0000003c27a03000 2044K —– /lib64/libplds4.so (deleted)
0000003c27c02000 4K r—- /lib64/libplds4.so (deleted)
0000003c27c03000 4K rw— /lib64/libplds4.so (deleted)
0000003c27e00000 16K r-x– /lib64/libplc4.so (deleted)
0000003c27e04000 2044K —– /lib64/libplc4.so (deleted)
0000003c28003000 4K r—- /lib64/libplc4.so (deleted)
0000003c28004000 4K rw— /lib64/libplc4.so (deleted)
0000003c28200000 228K r-x– /lib64/libnspr4.so (deleted)
0000003c28239000 2048K —– /lib64/libnspr4.so (deleted)
0000003c28439000 4K r—- /lib64/libnspr4.so (deleted)
0000003c2843a000 8K rw— /lib64/libnspr4.so (deleted)
0000003c2843c000 8K rw— [ anon ]
0000003c28600000 148K r-x– /usr/lib64/libnssutil3.so (deleted)
0000003c28625000 2044K —– /usr/lib64/libnssutil3.so (deleted)
0000003c28824000 24K r—- /usr/lib64/libnssutil3.so (deleted)
0000003c2882a000 4K rw— /usr/lib64/libnssutil3.so (deleted)
0000003c28a00000 408K r-x– /lib64/libfreebl3.so (deleted)
0000003c28a66000 2048K —– /lib64/libfreebl3.so (deleted)
0000003c28c66000 4K r—- /lib64/libfreebl3.so (deleted)
0000003c28c67000 4K rw— /lib64/libfreebl3.so (deleted)
0000003c28c68000 16K rw— [ anon ]
0000003c28e00000 28K r-x– /lib64/libcrypt-2.12.so (deleted)
0000003c28e07000 2048K —– /lib64/libcrypt-2.12.so (deleted)
0000003c29007000 4K r—- /lib64/libcrypt-2.12.so (deleted)
0000003c29008000 4K rw— /lib64/libcrypt-2.12.so (deleted)
0000003c29009000 184K rw— [ anon ]
0000003c29200000 1236K r-x– /usr/lib64/libnss3.so (deleted)
0000003c29335000 2044K —– /usr/lib64/libnss3.so (deleted)
0000003c29534000 20K r—- /usr/lib64/libnss3.so (deleted)
0000003c29539000 8K rw— /usr/lib64/libnss3.so (deleted)
0000003c2953b000 8K rw— [ anon ]
0000003c29600000 160K r-x– /usr/lib64/libsmime3.so (deleted)
0000003c29628000 2048K —– /usr/lib64/libsmime3.so (deleted)
0000003c29828000 12K r—- /usr/lib64/libsmime3.so (deleted)
0000003c2982b000 4K rw— /usr/lib64/libsmime3.so (deleted)
0000003c29a00000 204K r-x– /usr/lib64/libssl3.so (deleted)
0000003c29a33000 2048K —– /usr/lib64/libssl3.so (deleted)
0000003c29c33000 8K r—- /usr/lib64/libssl3.so (deleted)
0000003c29c35000 4K rw— /usr/lib64/libssl3.so (deleted)
0000003c29c36000 4K rw— [ anon ]
0000003c29e00000 12K r-x– /lib64/libcom_err.so.2.1 (deleted)
0000003c29e03000 2044K —– /lib64/libcom_err.so.2.1 (deleted)
0000003c2a002000 4K r—- /lib64/libcom_err.so.2.1 (deleted)
0000003c2a003000 4K rw— /lib64/libcom_err.so.2.1 (deleted)
0000003c2a200000 100K r-x– /usr/lib64/libsasl2.so.2.0.23.#prelink#.BXW3hH (deleted)
0000003c2a219000 2044K —– /usr/lib64/libsasl2.so.2.0.23.#prelink#.BXW3hH (deleted)
0000003c2a418000 4K r—- /usr/lib64/libsasl2.so.2.0.23.#prelink#.BXW3hH (deleted)
0000003c2a419000 4K rw— /usr/lib64/libsasl2.so.2.0.23.#prelink#.BXW3hH (deleted)
0000003c2aa00000 1488K r-x– /usr/lib64/libcrypto.so.1.0.0 (deleted)
0000003c2ab74000 2044K —– /usr/lib64/libcrypto.so.1.0.0 (deleted)
0000003c2ad73000 100K r—- /usr/lib64/libcrypto.so.1.0.0 (deleted)
0000003c2ad8c000 40K rw— /usr/lib64/libcrypto.so.1.0.0 (deleted)
0000003c2ad96000 16K rw— [ anon ]
0000003c2ae00000 56K r-x– /lib64/liblber-2.4.so.2.5.6.#prelink#.IEslwN (deleted)
0000003c2ae0e000 2044K —– /lib64/liblber-2.4.so.2.5.6.#prelink#.IEslwN (deleted)
0000003c2b00d000 4K r—- /lib64/liblber-2.4.so.2.5.6.#prelink#.IEslwN (deleted)
0000003c2b00e000 4K rw— /lib64/liblber-2.4.so.2.5.6.#prelink#.IEslwN (deleted)
0000003c2b200000 608K r-x– /usr/lib64/libfreetype.so.6.3.22.#prelink#.GI1Kfx (deleted)
0000003c2b298000 2044K —– /usr/lib64/libfreetype.so.6.3.22.#prelink#.GI1Kfx (deleted)
0000003c2b497000 24K rw— /usr/lib64/libfreetype.so.6.3.22.#prelink#.GI1Kfx (deleted)
0000003c2b600000 260K r-x– /lib64/libgssapi_krb5.so.2.2.#prelink#.gjYRNu (deleted)
0000003c2b641000 2048K —– /lib64/libgssapi_krb5.so.2.2.#prelink#.gjYRNu (deleted)
0000003c2b841000 4K r—- /lib64/libgssapi_krb5.so.2.2.#prelink#.gjYRNu (deleted)
0000003c2b842000 8K rw— /lib64/libgssapi_krb5.so.2.2.#prelink#.gjYRNu (deleted)
0000003c2ba00000 148K r-x– /usr/lib64/libpng12.so.0.49.0.#prelink#.cL7qH2 (deleted)
0000003c2ba25000 2048K —– /usr/lib64/libpng12.so.0.49.0.#prelink#.cL7qH2 (deleted)
0000003c2bc25000 4K rw— /usr/lib64/libpng12.so.0.49.0.#prelink#.cL7qH2 (deleted)
0000003c2be00000 292K r-x– /lib64/libldap-2.4.so.2.5.6.#prelink#.QXZutL (deleted)
0000003c2be49000 2048K —– /lib64/libldap-2.4.so.2.5.6.#prelink#.QXZutL (deleted)
total 286016K
[root@Smile ~]#
可以看到我的一個php-cgi佔用了大約28M
linux系統怎麼查看內存和CPU佔用情況呀?
1、在電腦中進入Linux操作系統,打開Linux命令界面。
2、在Linux命令界面中輸入cat /proc/meminfo命令後,敲擊鍵鍵盤迴車鍵。
3、在敲擊完回車鍵後,出現MemTotal和MemFree分別就是可支配內存和空閑內存了。
linux php-fpm進程佔用了多少內存
這個佔用多少是根據你php-fpm.conf裡面的配置來的。 pm.min_spare_servers = 8pm.max_spare_servers = 16一般情況是。剛啟動的php-fpm佔用內存是10M,當過一段時間後會慢慢變成20M左右。 以我這裡配置為例,最大情況是16個php-fpm子進程
如何查看linux php-fpm.pid位置
保證空閑進程數最大值,如果空閑進程大於此值,此進行清理
pm.max_requests = 1000
#設置每個子進程重生之前服務的請求數. 對於可能存在內存泄漏的第三方模塊來說是非常有用的. 如果設置為 ‘0’ 則一直接受請求. 等同於 PHP_FCGI_MAX_REQUESTS 環境變數. 默認值: 0.
pm.status_path = /status
#FPM狀態頁面的網址. 如果沒有設置, 則無法訪問狀態頁面. 默認值: none. munin監控會使用到
ping.path = /ping
#FPM監控頁面的ping網址. 如果沒有設置, 則無法訪問ping頁面. 該頁面用於外部檢測FPM是否存活並且可以響應請求. 請注意必須以斜線開頭 (/)。
ping.response = pong
#用於定義ping請求的返回相應. 返回為 HTTP 200 的 text/plain 格式文本. 默認值: pong.
request_terminate_timeout = 0
#設置單個請求的超時中止時間. 該選項可能會對php.ini設置中的’max_execution_time’因為某些特殊原因沒有中止運行的腳本有用. 設置為 ‘0’ 表示 ‘Off’.當經常出現502錯誤時可以嘗試更改此選項。
request_slowlog_timeout = 10s
#當一個請求該設置的超時時間後,就會將對應的PHP調用堆棧信息完整寫入到慢日誌中. 設置為 ‘0’ 表示 ‘Off’
slowlog = log/$pool.log.slow
#慢請求的記錄日誌,配合request_slowlog_timeout使用
rlimit_files = 1024
#設置文件打開描述符的rlimit限制. 默認值: 系統定義值默認可打開句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
rlimit_core = 0
#設置核心rlimit最大限制值. 可用值: ‘unlimited’ 、0或者正整數. 默認值: 系統定義值.
chroot =
#啟動時的Chroot目錄. 所定義的目錄需要是絕對路徑. 如果沒有設置, 則chroot不被使用.
chdir =
#設置啟動目錄,啟動時會自動Chdir到該目錄. 所定義的目錄需要是絕對路徑. 默認值: 當前目錄,或者/目錄(chroot時)
catch_workers_output = yes
#重定向運行過程中的stdout和stderr到主要的錯誤日誌文件中. 如果沒有設置, stdout 和 stderr 將會根據FastCGI的規則被重定向到 /dev/null . 默認值: 空.
三,常見錯誤及解決辦法整理
1,request_terminate_timeout引起的資源問題
request_terminate_timeout的值如果設置為0或者過長的時間,可能會引起file_get_contents的資源問題。
如果file_get_contents請求的遠程資源如果反應過慢,file_get_contents就會一直卡在那裡不會超時。我們知道php.ini 裡面max_execution_time 可以設置 PHP 腳本的最大執行時間,但是,在 php-cgi(php-fpm) 中,該參數不會起效。真正能夠控制 PHP 腳本最大執行時間的是 php-fpm.conf 配置文件中的request_terminate_timeout參數。
request_terminate_timeout默認值為 0 秒,也就是說,PHP 腳本會一直執行下去。這樣,當所有的 php-cgi 進程都卡在 file_get_contents() 函數時,這台 Nginx+PHP 的 WebServer 已經無法再處理新的 PHP 請求了,Nginx 將給用戶返回「502 Bad Gateway」。修改該參數,設置一個 PHP 腳本最大執行時間是必要的,但是,治標不治本。例如改成 30s,如果發生 file_get_contents() 獲取網頁內容較慢的情況,這就意味著 150 個 php-cgi 進程,每秒鐘只能處理 5 個請求,WebServer 同樣很難避免」502 Bad Gateway」。解決辦法是request_terminate_timeout設置為10s或者一個合理的值,或者給file_get_contents加一個超時參數。
$ctx = stream_context_create(array(
‘http’ = array(
‘timeout’ = 10 //設置一個超時時間,單位為秒
)
));
file_get_contents($str, 0, $ctx);
2,max_requests參數配置不當,可能會引起間歇性502錯誤:
1
pm.max_requests = 1000
設置每個子進程重生之前服務的請求數. 對於可能存在內存泄漏的第三方模塊來說是非常有用的. 如果設置為 』0′ 則一直接受請求. 等同於 PHP_FCGI_MAX_REQUESTS 環境變數. 默認值: 0.
這段配置的意思是,當一個 PHP-CGI 進程處理的請求數累積到 500 個後,自動重啟該進程。
但是為什麼要重啟進程呢?
一般在項目中,我們多多少少都會用到一些 PHP 的第三方庫,這些第三方庫經常存在內存泄漏問題,如果不定期重啟 PHP-CGI 進程,勢必造成內存使用量不斷增長。因此 PHP-FPM 作為 PHP-CGI 的管理器,提供了這麼一項監控功能,對請求達到指定次數的 PHP-CGI 進程進行重啟,保證內存使用量不增長。
正是因為這個機制,在高並發的站點中,經常導致 502 錯誤,我猜測原因是 PHP-FPM 對從 NGINX 過來的請求隊列沒處理好。不過我目前用的還是 PHP 5.3.2,不知道在 PHP 5.3.3 中是否還存在這個問題。
目前我們的解決方法是,把這個值盡量設置大些,儘可能減少 PHP-CGI 重新 SPAWN 的次數,同時也能提高總體性能。在我們自己實際的生產環境中發現,內存泄漏並不明顯,因此我們將這個值設置得非常大(204800)。大家要根據自己的實際情況設置這個值,不能盲目地加大。
話說回來,這套機制目的只為保證 PHP-CGI 不過分地佔用內存,為何不通過檢測內存的方式來處理呢?我非常認同高春輝所說的,通過設置進程的峰值內在佔用量來重啟 PHP-CGI 進程,會是更好的一個解決方案。
3,php-fpm的慢日誌,debug及異常排查神器:
request_slowlog_timeout設置一個超時的參數,slowlog設置慢日誌的存放位置
1
tail -f /var/log/
上面的命令即可看到執行過慢的php過程。
大家可以看到經常出現的網路讀取超過、Mysql查詢過慢的問題,根據提示信息再排查問題就有很明確的方向了。
原創文章,作者:CILUU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/313328.html