Apache ติดตั้งและเริ่มต้นได้ง่ายมาก แต่มาพร้อมกับโมดูลจำนวนมากที่ติดตั้งไว้ล่วงหน้าและเป็นผลให้คุณอาจมีปัญหาด้านประสิทธิภาพเมื่อใช้งานบน RAM VPS ที่ต่ำ
ดังนั้นไม่จำเป็นต้องมีเซิร์ฟเวอร์ที่ใหญ่กว่าเสมอไป แต่คุณสามารถกำหนดการตั้งค่า Apache ได้อย่างถูกต้องและมีประสิทธิภาพที่ดีที่สุด นี่คือบางสิ่งที่คุณควรทำเพื่อให้บรรลุ
บทช่วยสอนนี้มีไว้สำหรับ Ubuntu 14.04 LTS แต่หลักการก็คล้ายกับเวอร์ชั่นก่อนหน้าเช่นกัน
1. ปิดการใช้งานโมดูล Apache
คุณสามารถดูรายการของโมดูลทั้งหมดที่ติดตั้งด้วยคำสั่ง และโมดูลทั้งหมดที่มีการใช้งานที่มีอยู่ในปัจจุบันls /etc/apache2/mods-available/
ls /etc/apache2/mods-enabled/
ในการติดตั้ง Apache ครั้งแรกมีการเปิดใช้งานโมดูลอย่างน้อย 15 โมดูลตามค่าเริ่มต้น เหล่านี้มากเกินไปและส่วนใหญ่ไม่ต้องการ
ก่อนอื่นคุณต้องทำรายการของโมดูลที่ใช้งานอยู่ในปัจจุบันทั้งหมดและบันทึกไว้เพื่ออ้างอิงในอนาคตในกรณีที่คุณปิดการใช้งานบางสิ่งที่จำเป็นและคุณต้องเปิดใช้งานอีกครั้ง จากนั้นให้ปิดการใช้งานโมดูลแบบหนึ่งต่อหนึ่งด้วยคำสั่ง (ใช้ moduleName เป็นตัวอย่าง):
sudo a2dismod moduleName
... และรีสตาร์ท Apache หลังจากการเปลี่ยนแปลงแต่ละครั้งเพื่อดูว่ามีข้อผิดพลาดเกิดขึ้นหรือไม่
บางโมดูลที่คุณควรปิดใช้งานหากคุณไม่ต้องการคือ:
- PHP
- SSL
- Rewrite
- Perl
- หลาม
หลังจากคุณปิดการใช้งานโมดูลและโหลดการกำหนดค่า Apache อีกครั้งคุณสามารถตรวจสอบข้อผิดพลาดได้โดยการเปิดบันทึกข้อผิดพลาด Apache ด้วยโปรแกรมแก้ไขข้อความเช่น nano
sudo nano /var/log/apache2/error.log
หากคุณได้รับข้อผิดพลาดให้เปิดใช้งานโมดูลที่เกี่ยวข้องอีกครั้งด้วย:
sudo a2enmod moduleName
จากนั้นรีสตาร์ท Apache อีกครั้งจนกว่าคุณจะได้รับรายการขั้นต่ำ!
2. ตั้งค่า mpm_prefork
ด้วยการกำหนดค่า Apache เริ่มต้น (ซึ่งไม่สมดุลสำหรับเซิร์ฟเวอร์ขนาดเล็ก) หน่วยความจำสามารถหมดลงอย่างรวดเร็วและเซิร์ฟเวอร์คลาวด์ของคุณสามารถโอเวอร์โหลดได้ สิ่งนี้จะทำให้หน้าเว็บหยุดทำงานในสถานะโหลดอย่างต่อเนื่อง เป็นไปได้ว่าเซิร์ฟเวอร์จะทำให้กระบวนการ Apache ที่ไม่ทำงานเหล่านี้ทำงานอยู่โดยพยายามให้บริการเนื้อหาโดยไม่จำเป็นลดจำนวนกระบวนการที่สามารถให้บริการได้
ในการแก้ไขปัญหานี้ก่อนอื่นคุณต้องค้นหาว่า RAM ที่เซิร์ฟเวอร์ของคุณต้องการนอกเหนือจาก Apache และจำนวนหน่วยความจำเฉลี่ยที่กระบวนการ Apache ใช้อยู่
ขณะที่ Apache กำลังทำงานให้เปิดคำสั่งด้านบนของเซิร์ฟเวอร์
top -bn 1
บนตารางผลลัพธ์:
- เพิ่มตัวเลขในคอลัมน์ RES ขึ้นสำหรับทุกกระบวนการยกเว้น apache2แล้วลบออกจากจำนวน RAM ทั้งหมด สมมติว่าคุณจะได้รับ600 MB
- ได้รับเฉลี่ยจากทุกกระบวนการ apache2 สมมติว่าได้รับ20 MB
- จากนั้นทำขั้นตอนหารสูงสุด 600/20 = 30 กระบวนการ Apache
ขั้นตอนถัดไปแก้ไขไฟล์กำหนดค่าโมดูล mpm_prefork:
sudo nano /etc/apache2/mods-enabled/mpm_prefork.conf
อาจมีลักษณะเช่นนี้:
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxRequestWorkers 30
MaxConnectionsPerChild 0
</IfModule>
ที่ไหน:
- StartServers:จำนวนกระบวนการเซิร์ฟเวอร์ที่จะเริ่ม
- MinSpareServers:จำนวนขั้นต่ำของกระบวนการเซิร์ฟเวอร์ที่ถูกสำรองไว้
- MaxSpareServers:จำนวนสูงสุดของกระบวนการเซิร์ฟเวอร์ที่ถูกสำรองไว้
- MaxRequestWorkers:จำนวนสูงสุดของกระบวนการเซิร์ฟเวอร์ที่อนุญาตให้เริ่มต้น
- MaxConnectionsPerChild:จำนวนคำขอสูงสุดที่กระบวนการเซิร์ฟเวอร์ทำหน้าที่
ในการตั้งค่าMaxRequestWorkersคุณต้องเปลี่ยนเป็นสิ่งที่คุณพบในการแบ่งข้างต้น
ตอนนี้ถ้า VPS ของคุณโอเวอร์โหลดและถึงจำนวนลูกค้าสูงสุดที่สามารถให้บริการได้ในครั้งเดียวมันจะให้บริการผู้ใช้เหล่านั้นและผู้ใช้รายอื่น ๆ ก็จะได้รับความล้มเหลวอย่างรวดเร็ว จากนั้นพวกเขาสามารถโหลดหน้าซ้ำเพื่อลองอีกครั้ง เป็นการดีกว่าที่จะให้การเชื่อมต่อเหล่านี้ปิดอย่างรวดเร็ว แต่ปล่อยให้เซิร์ฟเวอร์อยู่ในสถานะปกติแทนที่จะเปิดค้างไว้ตลอดไป
3. ลดบันทึกของคุณ
เพื่อเพิ่มประสิทธิภาพคุณสามารถบันทึกข้อมูลได้น้อยลง ในการกำหนดค่า Apache เริ่มต้นLogLevelการตั้งค่าการตั้งค่าเพื่อเตือน คุณสามารถเปลี่ยนเป็นข้อผิดพลาดเพื่อเก็บข้อความผิดพลาดเท่านั้น
เปิดไฟล์คอนฟิกูเรชัน Apache:
sudo nano /etc/apache2/apache2.conf
ค้นหาบรรทัด:
LogLevel warn
... และเปลี่ยนเป็น:
LogLevel error
จากนั้นบันทึกไฟล์และรีสตาร์ท Apache ด้วย:
sudo service apache2 restart
แฟ้มเริ่มต้นที่ Apache เก็บบันทึกเป็น/var/log/apache2/error.log
4. พิจารณาแทนที่ mod_php
หากคุณใช้งานเว็บไซต์ PHP มีโอกาสมากที่คุณจะใช้โมดูล mod_php โมดูลนี้สามารถทำให้กระบวนการลูก Apache ทุกกระบวนการใช้ RAM เกิน 100 MB แม้ว่าการร้องขอสำหรับทรัพยากรแบบคงที่เช่นรูปภาพ, css และ javascript
ทางเลือกที่ดีคือโมดูลphp-fpmซึ่งเป็นกระบวนการแยกต่างหากที่ใช้โปรโตคอล fastcgi ด้วย php-fpm หน่วยความจำสำหรับกระบวนการ Apache สามารถลดลงถึง 10 MB สำหรับเนื้อหาแบบคงที่และ 60 MB สำหรับแบบไดนามิก
แม้ว่ามันอาจเป็นเรื่องยากเล็กน้อยที่จะได้รับสิ่งต่าง ๆ ในการทำงานกับการเปลี่ยนแปลงนี้
5. พิจารณาแทนที่ mpm_prefork
การกำหนดค่า Apache ส่วนใหญ่ใช้โมดูลmpm_preforkซึ่งเป็นเธรดที่ปลอดภัยและใช้กระบวนการลูกหลายกระบวนการด้วยหนึ่งเธรดแต่ละกระบวนการและแต่ละกระบวนการจัดการการเชื่อมต่อครั้งละหนึ่งรายการ หากคุณไม่ต้องการโมดูลภายนอกเช่น PHP หรือ Rails คุณสามารถแทนที่ด้วยโมดูลapache2-mpm-workerซึ่งมักจะเร็วกว่า ผู้ปฏิบัติงาน MPM ใช้กระบวนการลูกหลายกระบวนการที่มีหลายเธรดแต่ละเธรดแต่ละเธรดจัดการการเชื่อมต่อครั้งละหนึ่งรายการ
ในการเปิดใช้งานโมดูลผู้ปฏิบัติงานคุณต้องติดตั้ง
sudo apt-get install apache2-mpm-worker
คำสั่งนี้จะถอนการติดตั้งmpm_prefork , mos_phpและโมดูลเสริมอื่น ๆ ที่เข้ากันไม่ได้