ยอมรับว่า Ubuntu 14.04 ใช้ Apache 2 กับ PHP ที่ทำงานผ่านโมดูลmpm_preforkซึ่งไฟล์ที่แก้ไขได้อยู่ใน /etc/apache2/mods-enabled/mpm_prefork.conf นอกจากนี้ให้จำไว้ว่าการเริ่มต้นใน Apache 2.4 นั้นMaxClientsเปลี่ยนชื่อเป็นMaxRequestWorkersดังนั้นเอกสารใด ๆ ที่เกี่ยวข้องกับ MaxClients จะต้องเปลี่ยนเป็น MaxRequestWorkers
หยุดบริการเว็บ Apache ด้วยคำสั่งต่อไปนี้ชั่วคราว:
sudo service apache2 หยุด
- รอ 5 วินาทีจากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อค้นหาจำนวนหน่วยความจำเสมือนที่คุณมีบนเซิร์ฟเวอร์ที่ว่าง:
sudo ฟรี
อ่านบรรทัด Mem: และดูคอลัมน์ฟรี พิจารณาว่านี่เป็นปริมาณ RAM ที่คุณสามารถอุทิศให้กับ Apache ได้แม้ว่าฉันมักจะต้องการลดขนาด 2GB บนเซิร์ฟเวอร์ beefier (เช่นใน> 4GB) หรือ 1GB บนเซิร์ฟเวอร์ที่เบากว่า ดังนั้นหากคอลัมน์ฟรีบอกว่าฉันมี 13GB ฟรีฉันขอแนะนำให้ใช้ Apache 11GB นั่นเป็นพื้นฐาน หากเราพบปัญหาฐานข้อมูลในบันทึกเป็นครั้งคราว (เช่นใน 3 ครั้งในบันทึกในช่วงเวลา 3 วัน) ที่ต้องการหน่วยความจำเพิ่มเติมเราอาจพิจารณาว่าเรามี 10GB ที่จะเล่นด้วยแทน 11GB (ในกรณีนี้ ) หากเราพบในบันทึกของ Apache ว่าเซิร์ฟเวอร์ต้องการ MaxRequestWorkers มากขึ้นแสดงว่าเป็นปัญหาแยกต่างหากที่ฉันจะกล่าวถึงด้านล่าง
- เริ่มต้น Apache เว็บเซิร์ฟเวอร์
sudo service apache2 เริ่มต้น
เปิดแท็บเบราว์เซอร์เช่นแท็บ 10 แท็บเชื่อมต่อกับหน้าเว็บที่ยาวหรือช้าลงบางส่วนของคุณจากเว็บไซต์ของคุณและรีเฟรช 3-4 ครั้งในแต่ละแท็บ
หลังจากทำเช่นนั้นให้รันคำสั่งต่อไปนี้อย่างรวดเร็ว:
sudo ps -ylC apache2 | awk '{x + = $ 8; y + = 1} END {พิมพ์ "Apache Memory Usage (MB):" x / 1024; พิมพ์ "ขนาดกระบวนการเฉลี่ย (MB):" x / ((y-1) * 1024)} '
เรียกใช้อย่างรวดเร็ว 5 ครั้ง
ดูที่ค่าขนาดกระบวนการโดยเฉลี่ยและค่าเฉลี่ยนั้นใน 5 ครั้งที่คุณใช้งาน
ตอนนี้ทำคณิตศาสตร์ต่อไปนี้และให้แน่ใจว่าได้แปลง GB เป็น MB ตามความจำเป็นเพื่อให้ตัวเลขทั้งหมดอยู่ในค่า MB ดังนั้นคูณด้วย 1024 หรือหารด้วย 1024 ขึ้นอยู่กับว่าคุณต้องไปทางไหน
MaxRequestWorkers = พื้นฐานฟรี (พร้อมพื้นที่บัฟเฟอร์) / ขนาดกระบวนการเฉลี่ย
ตัวอย่างเช่นฉันมีเซิร์ฟเวอร์ 14GB แต่เมื่อ Apache หยุดทำงานเซิร์ฟเวอร์แสดงว่ามันใช้ RAM 1GB ในขณะที่ไม่ได้ใช้งาน ฉันให้อีก 1GB ในบางพื้นที่บัฟเฟอร์พิเศษสำหรับระบบปฏิบัติการในกรณีที่จำเป็น นั่นหมายความว่าฉันจะมีพื้นฐานฟรี 12GB ตอนนี้ฉันต้องแปลงจาก GB เป็น MB และดังนั้นฉันคูณ 12 x 1024 และรับ 12288 12288 MB คือค่า Baseline Free ของฉัน ในกรณีของฉันฉันเห็นว่าขนาดกระบวนการเฉลี่ยคือ 21MB ดังนั้นฉันใช้ 12288/21 และฉันได้รับประมาณ 585 ตอนนี้มันเป็นเรื่องธรรมดาที่ sysops ปัดค่านี้ลงและดังนั้นฉันจึงได้ 580
- แก้ไขไฟล์ /etc/apache2/mods-enabled/mpm_prefork.conf และพิจารณาตั้งเป็นค่าเริ่มต้นต่อไปนี้แทนที่ XXX ด้วยการคำนวณ MaxRequestWorkers ของคุณ:
`<IfModule mpm_prefork_module>`
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxRequestWorkers XXX
ServerLimit XXX
MaxConnectionsPerChild 0
</IfModule>
โปรดทราบว่าคุณอาจไม่เห็นพารามิเตอร์ ServerLimit เพิ่มมัน พารามิเตอร์นี้มีค่าเริ่มต้นที่ 256 หากไม่มีอยู่ แต่ต้องเป็นค่าเดียวกับ MaxRequestWorkers หรือคุณจะได้รับข้อผิดพลาด
ปัจจัยสำคัญอีกประการหนึ่งในการกำหนดค่า Apache ของคุณคือไฟล์ /etc/apache2/apache2.conf ที่มีตัวแปร Timeout และวัดเป็นวินาที นี่คือระยะเวลาที่คุณสามารถส่งหรือรับจากเซิร์ฟเวอร์ก่อนที่จะหมดเวลา คุณต้องคำนึงถึงการอัพโหลดไฟล์หรือดาวน์โหลดไฟล์เช่นหากคุณมีเว็บไซต์ที่ผู้คนสามารถอัพโหลดหรือดาวน์โหลด CSV หรือไฟล์ขนาดใหญ่อื่น ๆ ได้ และคุณต้องจำไว้ว่าเซิร์ฟเวอร์ฐานข้อมูลไม่ว่างและที่คุณอาจต้องให้เวลาก่อนที่หน้าหมดเวลา ยิ่งคุณทำให้ตัวแปร Timeout นั้นสั้นลงเท่าใดเว็บเซิร์ฟเวอร์ที่พร้อมใช้งานก็จะยิ่งได้รับการเชื่อมต่อใหม่มากขึ้นเท่านั้น อย่างไรก็ตามโปรดทราบว่าการตั้งค่านี้ต่ำเกินไปอาจทำให้เกิดความเสียหายกับตัวแปรเซสชัน PHP แม้ว่าจะไม่ได้ใช้คุกกี้ตามเซสชันของเบราว์เซอร์ ตัวอย่างเช่น ค่า 300 (5 นาที) อาจดีสำหรับเว็บเซิร์ฟเวอร์ที่ต้องใช้ตัวแปรเซสชันของ PHP สำหรับเวิร์กโฟลว์แอปพลิเคชันเว็บแทนคุกกี้เซสชันของเบราว์เซอร์ ค่า 45 อาจจะดีสำหรับเว็บเซิร์ฟเวอร์ที่ให้บริการได้มากกว่าหน้า Landing Page โฆษณาคงที่ แต่น่ากลัวสำหรับเซิร์ฟเวอร์ที่ต้องใช้ตัวแปรเซสชัน PHP อย่างมาก ดังนั้นแก้ไขพารามิเตอร์ Timeout ในไฟล์นี้เป็นจำนวนที่คุณต้องการ อาจใช้การทดสอบกับหน้าเว็บทั้งหมดของคุณเพื่อดูว่าค่าต่ำเกินไปหรือไม่ อย่างไรก็ตามอาจเป็นความคิดที่ดีที่จะไม่ตั้งค่าไว้สูงกว่า 300 จนกว่าคุณจะพบปัญหาในการอัปโหลดไฟล์ขนาดใหญ่หรือการดาวน์โหลดไฟล์ขนาดใหญ่ แต่จะแย่มากสำหรับเซิร์ฟเวอร์ที่ต้องใช้ตัวแปรเซสชัน PHP อย่างมาก ดังนั้นแก้ไขพารามิเตอร์ Timeout ในไฟล์นี้เป็นจำนวนที่คุณต้องการ อาจใช้การทดสอบกับหน้าเว็บทั้งหมดของคุณเพื่อดูว่าค่าต่ำเกินไปหรือไม่ อย่างไรก็ตามอาจเป็นความคิดที่ดีที่จะไม่ตั้งค่าไว้สูงกว่า 300 จนกว่าคุณจะพบปัญหาในการอัปโหลดไฟล์ขนาดใหญ่หรือการดาวน์โหลดไฟล์ขนาดใหญ่ แต่จะแย่มากสำหรับเซิร์ฟเวอร์ที่ต้องใช้ตัวแปรเซสชัน PHP อย่างมาก ดังนั้นแก้ไขพารามิเตอร์ Timeout ในไฟล์นี้เป็นจำนวนที่คุณต้องการ อาจใช้การทดสอบกับหน้าเว็บทั้งหมดของคุณเพื่อดูว่าค่าต่ำเกินไปหรือไม่ อย่างไรก็ตามอาจเป็นความคิดที่ดีที่จะไม่ตั้งค่าไว้สูงกว่า 300 จนกว่าคุณจะพบปัญหาในการอัปโหลดไฟล์ขนาดใหญ่หรือการดาวน์โหลดไฟล์ขนาดใหญ่
ตอนนี้เริ่มบริการเว็บ Apache ของคุณใหม่ หากคุณทำอะไรผิด Apache จะบอกคุณทันทีที่คุณเริ่มใหม่อีกครั้งและคุณสามารถแก้ไขได้
sudo service apache2 เริ่มต้นใหม่
- ทวนคำแนะนำเบราว์เซอร์แท็บ 10 ซ้ำที่คุณเคยทำก่อนหน้านี้และดูว่าคุณพบข้อผิดพลาดในการกำหนดค่า Apache ในบันทึกข้อผิดพลาดเซิร์ฟเวอร์เว็บ Apache:
sudo tail -f /var/log/apache2/error.log
... กด CTRL + C เพื่อออกไปจากที่คุณต้องการ
ค้นหาการร้องเรียนเกี่ยวกับการต้องการ MaxRequestWorkers (และเมื่อเร็ว ๆ นี้นับตั้งแต่คุณรีสตาร์ทเว็บเซิร์ฟเวอร์) หากคุณเห็นว่าแม้จะมีการตั้งค่า MaxRequestWorkers ที่ดีที่สุดคุณก็อาจต้องการพลังยิงเพิ่มขึ้นสำหรับเว็บไซต์หรือเว็บแอปพลิเคชันของคุณ พิจารณาตัวเลือกเหล่านี้:
- การใช้ CDN สำหรับการดาวน์โหลดไฟล์ภาพและสคริปต์ขนาดใหญ่
- การใช้บริการแคชเช่น CloudFlare หรืออื่น ๆ
- ทำซ้ำเว็บไซต์หรือกลยุทธ์เว็บแอปพลิเคชันของคุณเพื่อใช้หลายเว็บเซิร์ฟเวอร์ที่ทำหน้าที่เป็น "แอปพลิเคชันเว็บ" หนึ่งเดียวหลังโหลดบาลานเซอร์
- การเพิ่มแรมให้กับเซิร์ฟเวอร์และทำการคำนวณนี้ซ้ำแล้วซ้ำอีก
- ตอนนี้เซิร์ฟเวอร์ Apache ได้รับการปรับแต่งแล้ว คุณจะต้องตรวจสอบในช่วง 2-3 สัปดาห์และมองหาปัญหา MaxRequestWorker ในบันทึกข้อผิดพลาด Apache จากนั้นคุณสามารถตัดสินใจเกี่ยวกับการเพิ่มประสิทธิภาพ (ดูขั้นตอนที่ 10) นอกจากนี้คุณยังสามารถติดตั้ง Munin ด้วย apt บน Ubuntu และดูประสิทธิภาพของ Apache ในช่วงเวลาหนึ่งและทำตามแนวคิดของการเติบโตก่อนที่คุณจะตัดสินใจทำสิ่งใดเกี่ยวกับปริมาณการรับส่งข้อมูลที่เว็บเซิร์ฟเวอร์กำลังจัดการ