HestiaCP PHP-FPM არის მძიმე დატვირთვის ქვეშ? დინამიური ვებ გვერდი 500 შეცდომა? ეს ოპტიმიზაცია დაუყოვნებლივ შევა ძალაში!

სტატიების დირექტორია

ოდესმე შეგხვედრიათ ეს სიტუაცია?ვებსაიტზე წვდომა მოულოდნელად შენელდა, ან თუნდაც 500 შეცდომის შედეგი იყო PHP-FPM-ის გადატვირთვის შემდეგ, ის ნორმალურად დაბრუნდა.მაგრამ პრობლემა ხელახლა ჩნდება გარკვეული პერიოდის შემდეგ? ეს იმდენად იმედგაცრუებულია!

Რატომ ხდება ეს?სინამდვილეში, ეს ჩვეულებრივPHP-FPM პროცესის ფონდი არ არის სწორად კონფიგურირებული, ან სერვერის რესურსები არასაკმარისია.გამოწვეული. დღეს ჩვენ საფუძვლიან ოპტიმიზაციას მოვახდენთ HestiaCP დაინსტალირებული PHP-FPM ვებსაიტს ქვასავით სტაბილურს ხდის!

ძირითადი მიზეზი, რის გამოც PHP-FPM არის გადატვირთული

PHP-FPM არის აპროცესის მენეჯერი, რომელიც პასუხისმგებელია დინამიური მოთხოვნების დამუშავებაზე. თუ კონფიგურაცია არ არის გონივრული, შეიძლება გამოიწვიოს:

  • სერვერის რესურსები ამოწურულია, რის გამოც PHP-FPM ვერ უპასუხებს ახალ მოთხოვნებს დროულად;
  • ძალიან ცოტა პროცესები, როდესაც ტრაფიკი უეცრად იზრდება, მისი დროულად დამუშავება შეუძლებელია;
  • პროცესის გამოყენება ძალიან მაღალია, რაც იწვევს CPU-ს დატვირთვის აფეთქებას.

HestiaCP PHP-FPM არის მძიმე დატვირთვის ქვეშ? დინამიური ვებ გვერდი 500 შეცდომა? ეს ოპტიმიზაცია დაუყოვნებლივ შევა ძალაში!

როგორ გავარკვიოთ, არის თუ არა PHP-FPM გადატვირთული?

შეგიძლია გამოიყენო tophtop CPU და მეხსიერების გამოყენების სანახავად ბრძანება:

top -c

თუ ხედავთ პროცესის ინფორმაციას შემდეგი მსგავსი, ეს ნიშნავს, რომ PHP-FPM მუშაობს მაღალი დატვირთვის ქვეშ:

1669293 abc     20   0  790284 227880 185568 R  73.1   0.9   1:30.09 php-fpm: pool chenweiliang.com                                                    
1669522 abc     20   0  801924 224224 170236 R  69.9   0.9   0:59.01 php-fpm: pool chenweiliang.com

ნახეთ, როგორ იკავებს ეს პროცესები CPU-ს 70%-ზე მეტს? თუ ეს ხშირად ხდება, თქვენი PHP-FPM პრობლემა უნდა იყოს,

მაშ, როგორ მოვახდინოთ PHP-FPM კონფიგურაციის ოპტიმიზაცია ისე, რომ სერვერი აღარ იყოს გადატვირთული?

PHP-FPM პროცესის აუზის ოპტიმიზაცია (ძირითადი პარამეტრის კორექტირება)

პირველი, გახსენით php-fpm კონფიგურაციის ფაილები:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *გადადით თქვენს PHP ვერსიაზე, მაგალითად PHP8.3-ზე და შეცვალეთ ის შემდეგნაირად:/etc/php/8.3/fpm/pool.d/www.conf

HestiaCP-ის მიერ დაყენებული PHP ვერსიის მოთხოვნა

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.

მოდით გადავხედოთ თქვენს PHP-FPM კონფიგურაციას:

[chenweiliang.com]
listen = /run/php/php8.3-fpm-chenweiliang.com.sock
listen.owner = abc
listen.group = www-data
listen.mode = 0660

user = abc
group = abc

pm = ondemand
pm.max_children = 8
pm.max_requests = 4000
pm.process_idle_timeout = 10s

თქვენ ხედავთ, რომ თქვენი pm გამოყენებული არის ondemand,მიუხედავად იმისა, რომ მას შეუძლია შეამციროს რესურსის გამოყენება უმოქმედობის დროს, როდესაც ტრაფიკი მოულოდნელად იზრდება, პროცესმა შეიძლება ვერ შეძლოს დროულად რეაგირება., რის შედეგადაც მოხდა 500 შეცდომა.

1. დაარეგულირეთ PHP-FPM პროცესის აუზის პარამეტრები

თუ კონფიგურაცია იყენებს dynamicეს არის გარკვეული სამუშაო პროცესების წინასწარი დაწყების და მოთხოვნის მოცულობის მიხედვით მათი დინამიური კორექტირების მეთოდი, რომელსაც შეუძლია უფრო სწრაფად რეაგირება მოახდინოს მოთხოვნის მოცულობის უეცარი ზრდის შემთხვევაში.

გარკვეული რაოდენობის ტრაფიკის მქონე ვებსაიტებისთვის რეკომენდებულია გამოყენება pm = dynamicრადგან მას შეუძლია შეინარჩუნოს გარკვეული რაოდენობის უმოქმედო პროცესები და თავიდან აიცილოს 500 შეცდომა მაღალი პარალელურობის დროს.

რეკომენდებულია მისი გამოყენება მხოლოდ მაშინ, როდესაც წვდომის მოცულობა ძალიან დაბალია და მეხსიერების რესურსები შეზღუდულია. pm = ondemand რესურსების დაზოგვის მიზნით.

შესთავაზა ondemandდა ოპტიმიზაცია pm.max_children და სხვა პარამეტრები:

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 后自动退出

რატომ გინდა ასე შეცვალო?

  • pm = dynamic: გაანაწილეთ პროცესები უფრო მოქნილად, რათა თავიდან აიცილოთ მოთხოვნის მოლოდინი, რომელიც შეიძლება გამოწვეული იყოს მოთხოვნით;
  • pm.max_children = 16: თავიდან აიცილეთ 500 შეცდომა, რომელიც გამოწვეულია ძალიან ცოტა პროცესებით;
  • pm.start_servers = 5: მოერიდეთ პროცესის ნელი გაშვებას;
  • pm.max_requests = 3000:მეხსიერების გაჟონვის პრევენცია, პროცესის რეგულარულად გადამუშავება.

2. შეზღუდეთ PHP სკრიპტების შესრულების დრო, რათა თავიდან აიცილოთ გრძელვადიანი დაკავება

request_terminate_timeout = 30s  ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M  ; 限制 PHP 进程最大内存占用

ამან შეიძლება თავიდან აიცილოს ზოგიერთიPHP სკრიპტებს, რომლებიც იყენებენ ძალიან ბევრ CPU-ს, შეუძლიათ თქვენი სერვერის დაშლა.

შენახვის შემდეგ გადატვირთეთ PHP პროცესი:

sudo systemctl restart php8.3-fpm

ჩართეთ PHP-FPM სტატუსის მონიტორინგი, რათა თვალყური ადევნოთ პროგრესს ნებისმიერ დროს

ჩართეთ PHP-FPM პროცესის მონიტორინგი და იხილეთ იგი ნებისმიერ დროსაქტიური პროცესების მიმდინარე რაოდენობა და მოთხოვნის მოლოდინის სტატუსისერვერის გადატვირთვის თავიდან ასაცილებლად.

php-fpm.conf დამატებულია:

pm.status_path = /status

შემდეგ, Nginx კონფიგურაცია:

location /status {
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    allow 127.0.0.1;
    deny all;
}

ამ გზით თქვენ შეგიძლიათ http://yourdomain.com/status შეამოწმეთ PHP-FPM მოქმედებაში!

PHP-FPM ჟურნალების ოპტიმიზაცია პრობლემების სწრაფად მოსაგვარებლად

php-fpm.conf 添加:

php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On
php_admin_value[error_reporting] = E_ALL
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s  ; 执行超过 5s 的脚本记录到日志

ამ გზით, როდესაც 500 შეცდომა ხდება, შეგიძლიათ პირდაპირ ნახოთ ჟურნალი:

tail -f /var/log/php-fpm/error.log

ნახეთ, თუ PHP აცნობებს შეცდომას, მაგალითად out of memory,script execution timeout

რეგულარულად გადატვირთეთ PHP-FPM მეხსიერების გაჟონვის თავიდან ასაცილებლად

შეუძლია გაიაროს cron რეგულარულად გადატვირთეთ PHP-FPM, რათა თავიდან აიცილოთ ხანგრძლივი პროცესებიმეხსიერების გაჟონვა.

crontab -e

დაამატეთ შემდეგი დაგეგმილი დავალება, რომ ავტომატურად გადატვირთოთ PHP-FPM ყოველდღე დილის 3 საათზე:

0 3 * * * /usr/sbin/service php8.3-fpm restart

რა მოხდება, თუ პრობლემა შენარჩუნდება? შემდგომი ოპტიმიზაცია!

თუ მაინც დაიცავთ ზემოთ მოცემულ ოპტიმიზაციასზოგჯერ 500 შეცდომა ხდება, შეგიძლიათ გააგრძელოთ შემდეგი ოპტიმიზაცია:

1. ჩართეთ OPcache PHP-ის შესრულების ეფექტურობის გასაუმჯობესებლად

თუ OPcache ჯერ არ არის ჩართული, შეგიძლიათ დააინსტალიროთ იგი ასე (მაგალითად Ubuntu-ს გამოყენებით):

sudo apt install php8.3-opcache -y

შემდეგ რედაქტირება php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1

ეფექტი? PHP გვერდის შესრულების სიჩქარე მნიშვნელოვნად გაუმჯობესდა!

2. Nginx კონფიგურაციის ოპტიმიზაცია

დარწმუნდით, რომ Nginx დაკავშირებული პარამეტრები არის გონივრული, მაგ fastcgi_read_timeout დაარეგულირეთ ის სათანადოდ, რათა თავიდან აიცილოთ PHP სკრიპტების შეწყვეტა Nginx-ის მიერ ხანგრძლივი შესრულების დროის გამო:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

რეზიუმე: PHP-FPM-ის ოპტიმიზაცია და ვებსაიტი აღარ დაიშლება!

რა კორექტირება გავაკეთეთ ამ ოპტიმიზაციის შემდეგ?

✅ PHP-FPM პროცესის აუზის ოპტიმიზაცია, გამოყენება ondemandდა ოპტიმიზაცია pm.max_children პარამეტრი;
PHP სკრიპტების შესრულების დროის შეზღუდვაCPU-ს გრძელვადიანი ოკუპაციის თავიდან ასაცილებლად;
ჩართეთ PHP-FPM მონიტორინგი, ნახეთ პროცესის დატვირთვა რეალურ დროში;
PHP-FPM ჟურნალების ოპტიმიზაცია, სწრაფად მოაგვარეთ 500 შეცდომა;
რეგულარულად გადატვირთეთ PHP-FPM, მეხსიერების გაჟონვის თავიდან აცილება;
OPcache-ის ჩართვა, გააუმჯობესოს PHP შესრულების ეფექტურობა;
Nginx კონფიგურაციის ოპტიმიზაცია, რათა თავიდან იქნას აცილებული დროის ამოწურვის პრობლემები.

ამ ოპტიმიზაციის შემდეგ, PHP-FPM დატვირთვა მნიშვნელოვნად შემცირდება და ვებსაიტის მუშაობა უფრო სტაბილური გახდება! 🔥

წადი სცადე ახლავე! 💪🚀

იმედი ჩენ ვეილიანგის ბლოგი ( https://www.chenweiliang.com/ ) გააზიარა "HestiaCP PHP-FPM დატვირთვა ძალიან მაღალია? დინამიური ვებ გვერდი 500 შეცდომა? ეს ოპტიმიზაცია დაუყოვნებლივ შევა ძალაში! “, შესაძლოა ეს თქვენთვის სასარგებლო იყოს.

კეთილი იყოს თქვენი მობრძანება ამ სტატიის ბმულის გასაზიარებლად:https://www.chenweiliang.com/cwl-32512.html

მეტი ფარული ხრიკის გასახსნელად🔑, კეთილი იყოს თქვენი მობრძანება ჩვენს Telegram არხზე!

გააზიარეთ და მოიწონეთ თუ მოგეწონათ! თქვენი გაზიარებები და მოწონებები ჩვენი მუდმივი მოტივაციაა!

 

评论

თქვენი ელფოსტის მისამართი არ გამოქვეყნდება. გამოყენებულია აუცილებელი ველები * ლეიბლი

გადაახვიეთ ზემოთ