在Linux上,可以通過多種方式來設置PHP-FPM的資源限制,以確保系統的穩定性和安全性。以下是一些常見的方法:
如果您的系統使用systemd管理服務,可以在PHP-FPM的服務文件中設置資源限制。通常,該文件位于/etc/systemd/system/php-fpm.service或/lib/systemd/system/php-fpm.service。
在 [Service] 部分添加以下內容:
LimitNOFILE=65535
LimitMEMLOCK=infinity
這將分別設置文件描述符限制為65535和內存鎖定限制為無限制。你可以根據需要調整這些值。
cgroups(控制組)是Linux內核的一個功能,可以用來限制進程組的資源使用。要使用cgroups限制PHP-FPM的資源,請按照以下步驟操作:
sudo apt-get install cgroup-tools
sudo cgcreate -g memory,cpu:/php-fpm
echo "1G" | sudo tee /sys/fs/cgroup/memory/php-fpm/memory.limit_in_bytes
echo "50%" | sudo tee /sys/fs/cgroup/cpu/php-fpm/cpu.cfs_quota_us
這將限制PHP-FPM進程組的內存使用為1GB,CPU使用為50%。
sudo systemctl restart php-fpm
ulimit命令可以用來設置shell會話的資源限制。要使用ulimit限制PHP-FPM的資源,請按照以下步驟操作:
打開PHP-FPM的啟動腳本(通常位于/etc/init.d/php-fpm或/etc/init.d/php7.x-fpm,其中x是PHP版本號)。
在 start 函數中添加以下內容:
ulimit -n 65535
ulimit -m unlimited
這將分別設置文件描述符限制為65535和內存鎖定限制為無限制。
PHP-FPM的配置文件通常位于/etc/php/7.x/fpm/pool.d/www.conf或/etc/php-fpm.conf。
在配置文件中,可以設置以下參數來限制資源使用:
pm.max_children:設置最大子進程數。pm.start_servers:設置啟動時的子進程數。pm.min_spare_servers:設置最小空閑子進程數。pm.max_spare_servers:設置最大空閑子進程數。request_terminate_timeout:設置腳本的最大執行時間。memory_limit:設置每個PHP腳本的內存使用限制。例如,以下配置將限制最大子進程數為50,啟動時的子進程數為5,最小空閑子進程數為5,最大空閑子進程數為35,每個腳本的內存使用限制為128MB,腳本的最大執行時間為30秒。
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
request_terminate_timeout = 30s
memory_limit = 128M
完成上述配置后,保存配置文件并重啟PHP-FPM服務以使更改生效。
sudo systemctl restart php7.x-fpm
通過合理配置這些參數,可以有效地限制PHP-FPM的資源使用,確保系統資源的合理分配和使用。