فهرست مقاله
افزایش ناگهانی CPU سرور HestiaCP ؟ راهنمای کامل بهینهسازی فرآیند PHP-FPM!

آیا CPU سرور شما دائماً ۱۰۰٪ شارژ دارد؟ آیا فنها دیوانهوار میچرخند؟ آیا وبسایت شما به کندی بارگذاری میشود؟ ممکن است مشکل از php-fpm باشد!
من اخیرا کشف کردم chenweiliang.com این استخر PHP php-fpm این فرآیند به شدت CPU را مصرف کرد و سرور از کار افتاد!
برای احیای سرور، مجموعهای از روشهای بهینهسازی را امتحان کردم و در نهایت موفق شدم میزان استفاده از CPU را کاهش دهم.
حالا، بیایید این راهنمای بهینهسازی کارآمد را به اشتراک بگذاریم ! 🚀
1. تعداد فرآیندهای php-fpm را محدود کنید
تنظیمات پیشفرض برای php-fpm ممکن است تعداد نامحدودی از فرآیندها را ایجاد کند و باعث اضافه بار CPU سرور شود.
برای بهینهسازی آن، میتوانیم پارامترهای مدیریت فرآیند را تغییر دهیم.
روشن کن php-fpm فایل های پیکربندی:
sudo nano /etc/php/*/fpm/pool.d/www.conf
- *نسخه PHP خود را مانند PHP8.3 تغییر دهید و آن را به این صورت تغییر دهید:
/etc/php/8.3/fpm/pool.d/www.conf
نسخه PHP تنظیم شده توسط HestiaCP را پرس و جو کنید
v-list-web-domain user domain.com
به عنوان مثال:
v-list-web-domain abc chenweiliang.com
در خروجی چیزی شبیه به:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
این نشان میدهد که وبسایت از PHP 8.3 استفاده میکند.
پارامترهای زیر را بیابید و تغییر دهید:
pm = dynamic
pm.max_children = 16 ; 根据服务器资源调整,建议值:CPU 核心数 × 2
pm.start_servers = 4 ; 初始进程数,建议设为 max_children × 25%
pm.min_spare_servers = 2 ; 最小空闲进程数
pm.max_spare_servers = 7 ; 最大空闲进程数
pm.max_requests = 3000 ; 每个子进程处理完 3000 个请求后自动重启
pm.process_idle_timeout = 10s ; 空闲进程 10s 后自动退出
سپس راه اندازی مجدد کنید php-fpm برای تاثیرگذاری:
sudo systemctl restart php-fpm
✅اثر : تعداد فرآیندها را محدود میکند تا از مصرف بیش از حد منابع CPU توسط php-fpm جلوگیری شود.
2. OPCache را فعال کنید (برای بهبود عملکرد PHP)
PHP هر بار که کد را اجرا می کند، دوباره آن را اصلاح می کند، که باعث اتلاف منابع می شود.
راه حل؟ OPCache را فعال کنید و کد PHP خود را کش کنید!
ترجمه php.ini سند:
sudo nano /etc/php/*/fpm/php.ini
موارد زیر را اضافه یا اصلاح کنید:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0 # 禁用实时检测,提高性能
پس از ذخیره، فرآیند PHP را مجدداً راه اندازی کنید:
sudo systemctl restart php8.3-fpm
✅اثر : تجزیه تکراری کد PHP را کاهش میدهد، بار CPU را کم میکند و کارایی اجرا را بهبود میبخشد.
3. حداکثر زمان اجرای اسکریپت های PHP را محدود کنید
اگر یک اسکریپت PHP برای مدت طولانی اجرا شود، منابع CPU به طور مداوم اشغال خواهند شد.
تنظیم یک بازه زمانی معقول می تواند مانع از اشغال فرآیندهای "سرسخت" سرور برای مدت طولانی شود.
روشن کن php.ini سند:
sudo nano /etc/php/*/fpm/php.ini
پارامترهای زیر را تغییر دهید:
max_execution_time = 30 # PHP 脚本最多执行 30 秒
max_input_time = 30 # 处理输入数据最多 30 秒
memory_limit = 256M # 限制单个 PHP 进程的内存占用
سپس فرآیند PHP را مجدداً راه اندازی کنید:
sudo systemctl restart php-fpm
✅اثر : از اجرای طولانی مدت فرآیندهای PHP جلوگیری میکند و باعث کاهش اتلاف منابع CPU میشود.
4. بررسی کنید خروجی پرس و جو کند
PHP-FPM بار بالایی دارد،ممکن است ناشی از پرس و جو کند SQL باشد!
开启 خروجی ثبت پرس و جو کند، عبارات SQL را که مانع می شوند پیدا کنید.
فایل پیکربندی MySQL را ویرایش کنید:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
添加:
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 1 # 超过 1 秒的查询会被记录
پس از ذخیره، MySQL را مجددا راه اندازی کنید:
sudo systemctl restart mysql
سپس استفاده کنید mysqldumpslow پرس و جوهای کند را تجزیه و تحلیل کنید:
mysqldumpslow -s c -t 10 /var/log/mysql-slow.log
✅نتیجه : شناسایی کوئریهای SQL زمانبر، بهینهسازی عملکرد پایگاه داده و کاهش غیرمستقیم بار PHP.
۵. محدودیتها بهم پیوست استفاده از منابع
با نگاهی به لیست فرآیند، متوجه شدم استفاده از CPU پردازش Memcached 24.8٪ است!
ممکن است تخصیص حافظه نهان بیش از حد بزرگ باشد و باعث شود CPU مقدار زیادی داده را پردازش کند.
调整 memcached پیکربندی:
sudo nano /etc/memcached.conf
تجدید نظر:
-m 32 # 限制 Memcached 内存使用 32MB
سپس راه اندازی مجدد:
sudo systemctl restart memcached
✅اثر : بار CPU را بر روی فرآیند Memcached کاهش داده و کارایی ذخیرهسازی را بهبود میبخشد.
6. Nginx را فعال کنید تا منابع استاتیک را کش کند
بسیاری از اوقات، PHP درخواست هایی را پردازش می کند که حاوی تعداد زیادی درخواست هستند CSS، JS، تصاویر، اما این فایل ها اصلا نیازی به تجزیه PHP ندارند!
راه حل؟ از Nginx برای کش کردن منابع استاتیک استفاده کنید!
ویرایش پیکربندی Nginx:
sudo nano /etc/nginx/nginx.conf
添加:
location ~* \.(jpg|jpeg|png|gif|css|js|ico|xml)$ {
expires max;
log_not_found off;
}
پس از ذخیره، Nginx را مجددا راه اندازی کنید:
sudo systemctl restart nginx
✅نتیجه : تعداد دفعات پردازش فایلهای استاتیک توسط PHP را کاهش میدهد، در نتیجه مصرف CPU را پایین میآورد.
7. اسکریپت PHP را پیدا کنید که بیشترین استفاده از CPU را دارد
اگر CPU پس از بهینهسازی همچنان بسیار بالا باشد، ممکن است برخی از اسکریپتهای PHP بهطور شدید اجرا شوند.
از دستور زیر برای پیدا کردن فرآیند PHP با بیشترین استفاده از CPU استفاده کنید:
ps -eo pid,user,pcpu,pmem,args --sort=-pcpu | grep php
اگر متوجه شدید که یک اسکریپت PHP بیش از حد CPU اشغال می کند، می توانید مستقیماً آن را بکشید:
kill -9 PID
✅نتیجه : "سیبهای خراب" را به طور دقیق شناسایی میکند و از اشغال CPU توسط فرآیندهای PHP برای مدت طولانی جلوگیری میکند.
خلاصه: 7 روش برای بهینه سازی PHP-FPM
✅ تعداد فرآیندهای PHP-FPM را محدود کنید، برای جلوگیری از اضافه بار CPU
✅ OPCache را فعال کنید، تجزیه مکرر کد PHP را کاهش دهید
✅ تنظیم زمان PHP، برای جلوگیری از عملیات طولانی مدت
✅ بررسی پرس و جوهای کند MySQL، عملکرد پرس و جو پایگاه داده را بهینه کنید
✅ حافظه Memcached را تنظیم کنید، کاهش بار CPU
✅ کش استاتیک Nginx را فعال کنید، کاهش بار تجزیه PHP
✅ اسکریپت های PHP با مصرف بالای CPU را پیدا کنید، بهینه سازی دقیق
در نتیجه
بهینه سازی سرور مانند تناسب اندام است، شما باید تنظیمات دقیقی انجام دهید و به هم نخورید!
پس از یک سری بهینه سازی، بار CPU سرور من کاهش یافته است 80% کاهش به 15%، وب سایت دو برابر سریعتر باز می شود!
اگر سرور شما مشکلات مشابهی دارد، این روش ها را امتحان کنید! 💪
👉 همین حالا اقدام کنید! PHP-FPM خود را بهینه کنید و سرور خود را نجات دهید! 🚀
امیدوارم مقاله «فرایند HestiaCP php-fpm منابع CPU زیادی را مصرف میکند، چگونه آن را بهینه کنیم؟» که در وبلاگ چن ویلیانگ ( https://www.chenweiliang.com/ ) به اشتراک گذاشته شده است، برای شما مفید باشد.
لینک این مقاله را به اشتراک بگذارید: https://www.chenweiliang.com/cwl-32490.html
