![15 სასარგებლო MySQL/MariaDB შესრულების რეგულირებისა და ოპტიმიზაციის რჩევები](/f/5cb918848e0e85788849652976a39be6.png?width=100&height=100)
Მიხედვით Netcraft– ის ბოლო მოხსენება (ცნობილი ინტერნეტ კომპანია, რომელიც უზრუნველყოფს სხვა სერვისებს შორის ბრაუზერის გამოყენების სტატისტიკას), აპაჩი კვლავ რჩება ყველაზე ფართოდ გამოყენებული ვებ სერვერი საიტებსა და ინტერნეტთან დაკავშირებულ კომპიუტერებს შორის.
დამატებით, აპაჩი კვლავაც განიცდის ყველაზე დიდ ზრდას ტოპ ვებ სერვერებს შორის, რასაც მოყვება Nginx და IIS. ამრიგად, თუ თქვენ ხართ სისტემის ადმინისტრატორი პასუხისმგებელი Apache ინსტალაციების მართვაზე, თქვენ უნდა იცოდეთ როგორ დარწმუნდით, რომ თქვენი ვებ სერვერი მუშაობს მაქსიმალურად თქვენი (ან თქვენი კლიენტის) შესაბამისად საჭიროებებს.
ამ სტატიაში ჩვენ განვიხილავთ რამოდენიმე რჩევას, რომელიც დაგეხმარებათ დარწმუნდეთ იმაში, რომ Apache შეუფერხებლად იმუშავებს და შეძლებს გაუმკლავდეს იმ მოთხოვნების რაოდენობას, რომელსაც ელოდებით დისტანციური კლიენტებისგან.
ამასთან, გთხოვთ გახსოვდეთ, რომ Apache არ იყო შემუშავებული საორიენტაციო ჩანაწერების დადგენის მიზნით - მაგრამ, ასეც რომ იყოს, მას მაინც შეუძლია უზრუნველყოს მაღალი ეფექტურობა თითქმის ნებისმიერი გამოყენების შემთხვევაში, რაც თქვენ ფიქრობთ -ის
ის მიდის იმის თქმის გარეშე, რომ Apache- ის უახლესი ვერსიის დაყენება ალბათ ერთ -ერთი პირველია, რაც უნდა გაითვალისწინოთ. 2015 წლის 19 ნოემბრის მდგომარეობით, Apache– ის უახლესი ვერსია ხელმისაწვდომია CentOS 7 საცავი არის 2.4.6, ხოლო შიგნით დებიანის არის 2.4.10.
თუმცა, შეიძლება იყოს ბოლოდროინდელი გაუმჯობესება ან ხარვეზის გამოსწორება, რომელიც დაემატა ახლად გამოშვებულ სტაბილურ ვერსიას, რომელიც შემდეგ ხელმისაწვდომი გახდება წყაროდან გადმოსაწერად და ინსტალაციისთვის. ასევე მოცემულია შედგენისა და ინსტალაციის ინსტრუქციები აქ - უბრალოდ დაიმახსოვრეთ, რომ თუ აირჩევთ განახლების ამ მეთოდს, სიფრთხილის ზომების შესაბამისად დაგჭირდებათ თქვენი ახლანდელი კონფიგურაციის ფაილების / საიტების / ვირტუალური მასპინძლების სარეზერვო ასლების შექმნა.
ნებისმიერ შემთხვევაში, თქვენ შეგიძლიათ შეამოწმოთ თქვენი ამჟამად დაინსტალირებული ვერსია შემდეგნაირად:
# httpd -v [RedHat/CentOS დაფუძნებულ სისტემებზე] # apache2 –v [Debian/Ubuntu დაფუძნებულ სისტემებზე]
როგორც წესი, დაიცავით თქვენი არჩეული განაწილების პაკეტის მენეჯერის მიერ მოწოდებული განახლების მეთოდი (yum განახლება httpd
ან aptitude safe-upgrade apache2
, შესაბამისად CentOS ან Debian– ისთვის), თუ სხვა გზა არ არის. თქვენ შეგიძლიათ წაიკითხოთ უახლესი გამოშვების ჩანაწერები Apache დოკუმენტაციის განყოფილება Apache HTTP სერვერის პროექტის ვებსაიტზე.
რატომ? ბირთვის ვერსიები 2.4 და ზემოთ გაააქტიურეთ sendfile ბირთვის სისტემის ზარი ნაგულისხმევად. ეს, თავის მხრივ, ხელს უწყობს მაღალი ხარისხის ფაილების გადაცემას (რაც სასურველია ვებ სერვერ-კლიენტის კონტექსტში კომუნიკაცია) და საშუალებას აძლევს Apache– ს მიაწოდოს სტატიკური შინაარსი უფრო სწრაფად და დაბალი CPU– ს გამოყენებით ერთდროულად წაკითხვის და ოპერაციების გაგზავნა.
თქვენ შეგიძლიათ ნახოთ თქვენი ამჟამად დაინსტალირებული ბირთვი შემდეგით:
# uname -r.
და შეადარეთ www.kernel.org– ის უახლეს სტაბილურ ბირთვს (4.3 ამ წერის დროს).
მიუხედავად იმისა, რომ ეს არ არის დამწყებთათვის განკუთვნილი პროცესი, თქვენი ბირთვის განახლება საინტერესო სავარჯიშოა Linux- ის შიდა ნაწილების შესახებ მეტი ინფორმაციის მისაღებად.
პრაქტიკაში, დეპუტატები გააფართოვეთ Apache– ის მოდულური ფუნქციონირება, რაც საშუალებას მოგცემთ გადაწყვიტოთ როგორ დააკონფიგურიროთ ვებ სერვერი ქსელში დასაკავშირებლად პორტები აპარატზე, იღებენ კლიენტების მოთხოვნებს და იყენებენ ბავშვთა პროცესებს (და ძაფებს, ალტერნატიულად), რომ გაუმკლავდნენ მათ მოთხოვნებს.
2.4 ვერსიიდან დაწყებული, Apache გთავაზობთ სამ სხვადასხვა MPM- ს, რომელთაგან შეგიძლიათ აირჩიოთ, თქვენი საჭიროებიდან გამომდინარე:
პრეფორკი
MPM იყენებს მრავალჯერადი ბავშვის პროცესს ძაფის გარეშე. თითოეული პროცესი ერთდროულად ამუშავებს ერთ კავშირს თითოეულისთვის ცალკეული ძაფების შექმნის გარეშე. ზედმეტი დეტალების გარეშე, ჩვენ შეგვიძლია ვთქვათ, რომ თქვენ გსურთ გამოიყენოთ ეს MPM მხოლოდ გამართვისას პროგრამა, რომელიც იყენებს, ან თუ თქვენს აპლიკაციას სჭირდება გაუმკლავდეს ძაფის გარეშე მოდულებს, როგორიცაა mod_php.მუშა
MPM იყენებს რამდენიმე ძაფს თითოეულ პროცესზე, სადაც თითოეული ძაფი ამუშავებს ერთ კავშირს ერთდროულად. ეს კარგი არჩევანია მაღალი ტრაფიკის სერვერებისთვის, რადგან ის საშუალებას იძლევა უფრო მეტი ერთდროული კავშირების დამუშავება ნაკლები ოპერატიული მეხსიერებით, ვიდრე წინა შემთხვევაში.მოვლენა
MPM არის ნაგულისხმევი MPM უმეტეს Apache ინსტალაციებში 2.4 და ზემოთ ვერსიებისთვის. იგი მსგავსია მუშა MPM– ით იმით, რომ ის ასევე ქმნის მრავალ ძაფს თითოეულ ბავშვზე, მაგრამ უპირატესობით: იწვევს KeepAlive ან უსაქმოდ კავშირები (სანამ ისინი ამ მდგომარეობაში რჩებიან) უნდა იქნას დამუშავებული ერთი ძაფით, რითაც თავისუფლდება მეხსიერება, რომელიც შეიძლება გადანაწილდეს სხვა ძაფებზე. ეს MPM არ არის შესაფერისი გამოსაყენებლად არასასურველი მოდულებით, როგორიცაა mod_php, რისთვისაც შემცვლელი ასეთი PHP-FPM უნდა იქნას გამოყენებული მის ნაცვლად.შესამოწმებლად MPM გამოიყენება თქვენი Apache ინსტალაციის საშუალებით, შეგიძლიათ გააკეთოთ:
# httpd -V.
ქვემოთ მოყვანილი სურათი აჩვენებს, რომ ეს კონკრეტული ვებ სერვერი იყენებს prefork MPM.
ამის შესაცვლელად, თქვენ უნდა შეცვალოთ:
# /etc/httpd/conf.modules.d/00-mpm.conf [RedHat/CentOS დაფუძნებულ სისტემებზე] #/etc/apache2/mods-available/. დატვირთვა [Debian/Ubuntu დაფუძნებულ სისტემებზე]
სად
და გაუკეთე კომენტარი იმ ხაზს, რომელიც იტვირთება სასურველ მოდულს ასე:
LoadModule mpm_event_module modules/mod_mpm_event.so.
შენიშვნა: იმისათვის, რომ ღონისძიება MPM იმუშაოს დებიანში, შეიძლება დაგჭირდეთ მისი დაყენება libapache2-mod-fastcgi პაკეტი არა-უფასო საცავებიდან.
გარდა ამისა, CentOS– ისთვის დაგჭირდებათ php-fpm (ერთად fcgi და mod_fcgid) ხოლო დებიანში მას ჰქვია php5-fpm (ერთად apache2-mpm- მოვლენა).
ბოლო, მაგრამ არანაკლებ მნიშვნელოვანი, გადატვირთეთ ვებ სერვერი და ახლად დაინსტალირებული php-fpm (ან php5-fpm) მომსახურება:
# systemctl გადატვირთეთ httpd php-fpm && systemctl ჩართეთ httpd php-fpm
# systemctl გადატვირთეთ apache2 php5-fpm && systemctl ჩართეთ apache2 php5-fpm
მიუხედავად იმისა, რომ თქვენ შეგიძლიათ დააყენოთ Apache, რომ გამოიყენოს კონკრეტული MPM, ეს კონფიგურაცია შეიძლება გაუქმდეს თითო ვირტუალური მასპინძელი საფუძველი იმავე წესით, როგორც ადრე იყო მითითებული.
უბრალოდ ჩააგდეთ შესაბამისი ტეგები თითოეული ვირტუალური მასპინძლის კონფიგურაციის ფაილში და მზად ხართ წასასვლელად - მაგრამ დარწმუნდით, რომ იყენებთ ერთ და მხოლოდ ერთ MPM- ს vhost– ზე.
დაბოლოს, გთხოვთ გაითვალისწინოთ, რომ თქვენი არჩეული განაწილების მიუხედავად, php-fpm ეყრდნობა განხორციელებას FastCGI, რაც არის მიზეზი იმისა, თუ რატომ ვურჩევდი დამატებით პაკეტის ინსტალაციებს ადრე.
დამატებითი დეტალებისა და მაგალითებისათვის php-fpm და როგორ შეუძლია მას MPM ღონისძიებასთან ერთად გაზარდოს Apache– ის მოქმედება, თქვენ უნდა მიმართოთ ოფიციალური დოკუმენტაცია.
ეს არის ის, რასაც მე ვხედავ ნაგულისხმევი MPM- ის წინასწარგამოწყობიდან მოვლენის შეცვლის შემდეგ წინა სურათში ნაჩვენები იმავე ყუთში:
ში CentOS 7, თქვენ უნდა დარწმუნდეთ, რომ http და https სერვისები ჩართულია firewall– ის საშუალებით და რომ ქსელის ინტერფეისი (ები) სწორად არის დამატებული ნაგულისხმევ ზონაში.
Მაგალითად:
# firewall-cmd --zone = შიდა --add-interface = tun6to4 # firewall-cmd --zone = შიდა --add-interface = tun6to4-მუდმივი # firewall-cmd --set-default-zone = შიდა # firewall-cmd --add-service = http # firewall-cmd --add-service = https # firewall-cmd --add-service = http --permanent # firewall-cmd --add-service = https --permanent # firewall-cmd -გადატვირთვა
მიზეზი, რის გამოც მე ამას აღვნიშნავ, არის ის, რომ მე ცოტა ხნის წინ განვიცადე პრობლემა, სადაც ნაგულისხმევი იყო firewalld კონფიგურაცია ღრუბლოვან VPS პარამეტრებში ხელი შეუშალა php-fpm და Apache php ფაილების დამუშავებიდან.
როგორც ძირითადი ტესტი (დარწმუნებული ვარ, შეგიძლიათ უფრო რთული ან სტრესულიც მოიფიქროთ), მე შევქმნი php ფაილს, რომელიც ამოწმებს სხვა ფაილის არსებობას სახელად ტესტი. php
ორი CentOS 7 სერვერის ერთსა და იმავე დირექტორიაში, იგივე ტექნიკური მახასიათებლებით და დატვირთვით, მაგრამ განსხვავებული MPM- ით. ერთი მათგანი გამოიყენებს ღონისძიებას, ხოლო მეორე გამოიყენებს პრეფორკს:
ეს არის php კოდი, რომელიც მე შევინახე ფაილში checkiffileexists.php
:
php $ filename = 'test.php'; if (file_exists ($ filename)) {echo "ფაილის $ filename არსებობს"; } else {echo "ფაილის $ filename არ არსებობს"; }
შემდეგ ჩვენ გავუშვებთ Apache საორიენტაციო ინსტრუმენტი (ab) თან 200 ერთდროული მოთხოვნები მანამ 2000 მოთხოვნები დასრულებულია:
# ab -k -c 100 -n 2000 localhost/checkiffileexists.php.
მოდით ჩავატაროთ ტესტი და შევადაროთ შედეგები. ყურადღება მიაქციეთ შესრულების სტატისტიკას:
როგორც ხედავთ, სერვერის მოქმედება მოვლენაზე ბევრად აღემატება მას პრეფორკი ანალოგი ამ ტესტის ყველა ასპექტში.
ალბათ, ყველაზე კრიტიკული აპარატურის ელემენტი, რომელიც გასათვალისწინებელია არის მისი ოდენობა ოპერატიული მეხსიერება გამოყოფილია თითოეული Apache პროცესისთვის. მიუხედავად იმისა, რომ თქვენ ამას პირდაპირ ვერ გააკონტროლებთ, შეგიძლიათ შეზღუდოთ ბავშვთა პროცესების რაოდენობა MaxRequestWorkers დირექტივა (ადრე ცნობილი იყო როგორც მაქს კლიენტები აპაჩში 2.2), რომელიც ზღუდავს RAM– ის გამოყენებას Apache– ს მიერ. კიდევ ერთხელ, თქვენ შეგიძლიათ დააყენოთ ეს მნიშვნელობა თითო მასპინძელზე ან ვირტუალურ მასპინძელზე.
ამისათვის თქვენ უნდა გაითვალისწინოთ Apache– ს მიერ გამოყენებული RAM– ის საშუალო რაოდენობა, შემდეგ გაამრავლოთ მისი რიცხვით MaxRequestWorkersდა ეს არის მეხსიერების მოცულობა, რომელიც გამოიყოფა Apache პროცესებისთვის. ერთი რამ, რისი გაკეთებაც არასოდეს გინდათ თქვენს ვებ სერვერზე, არის სვოპის გამოყენება, რადგან ეს მნიშვნელოვნად შეამცირებს მის მუშაობას. ამრიგად, თქვენ ყოველთვის უნდა შეინარჩუნოთ RAM– ის გამოყენება Apache– ს მიერ იმ საზღვრებში, რისი საშუალებაც გაქვთ და არასოდეს დაეყრდნოთ მის გაცვლას.
მაგალითად, შემდეგი ბლოკი ზღუდავს ერთდროული კლიენტების რაოდენობას 30. თუ მეტი კლიენტი მოხვდა მასპინძელს, მათ შეიძლება განიცადონ შეფერხება ან წამიერი უკმარისობა, რომელიც ადვილად მოგვარდება ბრაუზერის განახლებით. მიუხედავად იმისა, რომ ეს შეიძლება არასასურველი იყოს, ის უფრო ჯანსაღია სერვერისთვის და გრძელვადიან პერსპექტივაში, საუკეთესოა თქვენი საიტისთვისაც.
თქვენ შეგიძლიათ განათავსოთ ეს ბლოკი შიგნით /etc/httpd/conf/httpd.conf
ან /etc/apache2/apache2.conf
დამოკიდებულია იმაზე, იყენებთ CentOS- ს თუ Debian- ს.
გთხოვთ გაითვალისწინოთ, რომ ერთი და იგივე პრინციპი ვრცელდება ყველასთვის დეპუტატები - მე აქ ვიყენებ ღონისძიებას, რომ გავაგრძელო წინა რჩევით ასახული კონცეფცია:
StartServers 3 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestWorkers 30 MaxConnectionsPerChild 1000.
ნებისმიერ შემთხვევაში, მიზანშეწონილია მიმართოთ Apache 2.4 დოკუმენტი რომ ნახოთ რომელი დირექტივებია ნებადართული თქვენი არჩეული MPM– სთვის.
როგორც წესი, თქვენ არ უნდა ჩატვირთოთ ნებისმიერი Apache მოდული, რომელიც არ არის მკაცრად საჭირო თქვენი აპლიკაციის მუშაობისთვის. ეს მოითხოვს სულ მცირე ცოდნას თქვენს სერვერზე გაშვებული პროგრამების შესახებ, განსაკუთრებით იმ შემთხვევაში, თუ თქვენ ხართ სისტემის ადმინისტრატორი და სხვა გუნდია პასუხისმგებელი განვითარებაზე.
თქვენ შეგიძლიათ ჩამოთვალოთ ამჟამად დატვირთული მოდულები შემდეგით:
# httpd -M [RedHat/CentOS დაფუძნებულ სისტემებზე] # apache2ctl -M [Debian/Ubuntu დაფუძნებულ სისტემებზე]
მოდულების გადმოტვირთვა / გამორთვა CentOSთქვენ მოგიწევთ კომენტარის გაკეთება იმ ხაზის შესახებ, რომელიც იწყება LoadModule (ან ძირითად კონფიგურაციის ფაილში, ან შიგნით დამხმარე ფაილში /etc/httpd/conf.modules.d.
Მეორეს მხრივ, დებიანი უზრუნველყოფს ინსტრუმენტს სახელწოდებით a2dismod მოდულების გამორთვა და გამოიყენება შემდეგნაირად:
# a2dismod მოდულის_ სახელი.
მისი უკან დასაბრუნებლად:
# a2enmod მოდულის_სახელი.
ნებისმიერ შემთხვევაში, გახსოვდეთ, რომ გადატვირთეთ Apache, რომ ცვლილებები ძალაში შევიდეს.
ამ სტატიაში ჩვენ განვიხილეთ 5 რჩევა რომელიც დაგეხმარებათ Apache ვებ სერვერის მორგებაში და გაზრდით მის მუშაობას. გარდა ამისა, უნდა გახსოვდეთ, რომ უსაფრთხოების გარეშე ოპტიმიზაცია და შესრულება უაზროა, ასე რომ თქვენ შეიძლება მოგინდეთ მითითება დააინსტალირეთ mod_pagespeed ვებ სერვერის მუშაობის გასაუმჯობესებლად და Apache გამკვრივების რჩევების სტატია ასევე Tecmint.com– ში.
ვინაიდან ჩვენ არ შეგვიძლია ამ თემის ამ ასპექტის ადეკვატურად გაშუქება, ალბათ თქვენ მოიფიქრებთ სხვა იდეებს, რომელთა გაზიარება გსურთ დანარჩენ საზოგადოებასთან. თუ ასეა, მოგერიდებათ შეგვატყობინოთ ქვემოთ მოცემული კომენტარის ფორმის გამოყენებით.