วิธีการปรับแต่ง Apache บนเซิร์ฟเวอร์ Ubuntu 14.04


18

ปัจจุบันใน Apache 2 ของฉัน (Apache 2.4.7 เป็นที่แน่นอน) ใน Ubuntu 14.04 ฉันมีการตั้งค่านี้:

/etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>
StartServers                    20
MinSpareServers                 100
MaxSpareServers                 250
MaxRequestWorkers               150
MaxConnectionsPerChild          0
</IfModule>

เซิร์ฟเวอร์นั้นเป็นเซิร์ฟเวอร์ Amazon (8GB) ที่ไม่ได้ทำอะไรมากไปกว่าการโหลดแบบฟอร์มสมัครสามหน้าสำหรับแคมเปญโฆษณาของ Google

ฉันพบสคริปต์ชื่อapachetuneit.shบนเว็บ แต่หลังจากนั้นครู่หนึ่ง Apache ก็รายงานข้อผิดพลาดนี้:

[อังคาร 21 เมษายน: 45: 42.227935 2015] [mpm_prefork: ข้อผิดพลาด] [pid 1134] AH00161: เซิร์ฟเวอร์ถึงการตั้งค่า MaxRequestWorkers พิจารณาเพิ่มการตั้งค่า MaxRequestWorkers

ฉันจะตัดสินวิธีตั้งค่าเหล่านี้ได้อย่างไร

ฉันขอเฉพาะเฉพาะสำหรับวิธีการปรับแต่ง Apache 2.4 และไม่มีอะไรอื่น นี่คือเหตุผลที่คำถามนี้แตกต่างจากคำถามนี้



@ JennD บทความนั้นกว้างเกินไปสำหรับความต้องการเฉพาะนี้
ServerChecker

วิธีที่คุณตัดสินการตั้งค่าเฉพาะเหล่านี้คือคุณทำการทดสอบโหลด
เจนนี่ D

@ JennyD มันง่ายกว่านั้นอีก เพียงใช้สคริปต์ ap.sh ภายใต้การโหลดปกติหลายครั้งในวันและค่าเฉลี่ยทำคณิตศาสตร์ต่อลิงก์บริการคลาวด์ด้านล่างและตั้งค่า MaxRequestWorkers เป็นค่านั้น จากนั้นดูบันทึกของ Apache สำหรับปัญหาเกี่ยวกับ MaxRequestWorkers และเพิ่มขึ้นเพิ่ม RAM เพิ่มขึ้นเพิ่ม CloudFlare หรือเพิ่มเว็บโหนดอื่น ไม่จำเป็นต้องทำการทดสอบโหลดที่รุนแรงมาก
ServerChecker

คุณสามารถเขียนคำตอบที่มีข้อมูลเกี่ยวกับสคริปต์นั้นและสิ่งที่เกี่ยวข้องจากลิงก์ที่คุณรวมไว้ในคำตอบของคุณเองไปยังคำถามที่ฉันชี้ไปว่าซ้ำซ้อนที่สุด
Jenny D

คำตอบ:


45
  1. ยอมรับว่า Ubuntu 14.04 ใช้ Apache 2 กับ PHP ที่ทำงานผ่านโมดูลmpm_preforkซึ่งไฟล์ที่แก้ไขได้อยู่ใน /etc/apache2/mods-enabled/mpm_prefork.conf นอกจากนี้ให้จำไว้ว่าการเริ่มต้นใน Apache 2.4 นั้นMaxClientsเปลี่ยนชื่อเป็นMaxRequestWorkersดังนั้นเอกสารใด ๆ ที่เกี่ยวข้องกับ MaxClients จะต้องเปลี่ยนเป็น MaxRequestWorkers

  2. หยุดบริการเว็บ Apache ด้วยคำสั่งต่อไปนี้ชั่วคราว:

    sudo service apache2 หยุด
  1. รอ 5 วินาทีจากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อค้นหาจำนวนหน่วยความจำเสมือนที่คุณมีบนเซิร์ฟเวอร์ที่ว่าง:
    sudo ฟรี

อ่านบรรทัด Mem: และดูคอลัมน์ฟรี พิจารณาว่านี่เป็นปริมาณ RAM ที่คุณสามารถอุทิศให้กับ Apache ได้แม้ว่าฉันมักจะต้องการลดขนาด 2GB บนเซิร์ฟเวอร์ beefier (เช่นใน> 4GB) หรือ 1GB บนเซิร์ฟเวอร์ที่เบากว่า ดังนั้นหากคอลัมน์ฟรีบอกว่าฉันมี 13GB ฟรีฉันขอแนะนำให้ใช้ Apache 11GB นั่นเป็นพื้นฐาน หากเราพบปัญหาฐานข้อมูลในบันทึกเป็นครั้งคราว (เช่นใน 3 ครั้งในบันทึกในช่วงเวลา 3 วัน) ที่ต้องการหน่วยความจำเพิ่มเติมเราอาจพิจารณาว่าเรามี 10GB ที่จะเล่นด้วยแทน 11GB (ในกรณีนี้ ) หากเราพบในบันทึกของ Apache ว่าเซิร์ฟเวอร์ต้องการ MaxRequestWorkers มากขึ้นแสดงว่าเป็นปัญหาแยกต่างหากที่ฉันจะกล่าวถึงด้านล่าง

  1. เริ่มต้น Apache เว็บเซิร์ฟเวอร์
    sudo service apache2 เริ่มต้น
  1. เปิดแท็บเบราว์เซอร์เช่นแท็บ 10 แท็บเชื่อมต่อกับหน้าเว็บที่ยาวหรือช้าลงบางส่วนของคุณจากเว็บไซต์ของคุณและรีเฟรช 3-4 ครั้งในแต่ละแท็บ

  2. หลังจากทำเช่นนั้นให้รันคำสั่งต่อไปนี้อย่างรวดเร็ว:

    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

  1. แก้ไขไฟล์ /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 หรือคุณจะได้รับข้อผิดพลาด

  1. ปัจจัยสำคัญอีกประการหนึ่งในการกำหนดค่า Apache ของคุณคือไฟล์ /etc/apache2/apache2.conf ที่มีตัวแปร Timeout และวัดเป็นวินาที นี่คือระยะเวลาที่คุณสามารถส่งหรือรับจากเซิร์ฟเวอร์ก่อนที่จะหมดเวลา คุณต้องคำนึงถึงการอัพโหลดไฟล์หรือดาวน์โหลดไฟล์เช่นหากคุณมีเว็บไซต์ที่ผู้คนสามารถอัพโหลดหรือดาวน์โหลด CSV หรือไฟล์ขนาดใหญ่อื่น ๆ ได้ และคุณต้องจำไว้ว่าเซิร์ฟเวอร์ฐานข้อมูลไม่ว่างและที่คุณอาจต้องให้เวลาก่อนที่หน้าหมดเวลา ยิ่งคุณทำให้ตัวแปร Timeout นั้นสั้นลงเท่าใดเว็บเซิร์ฟเวอร์ที่พร้อมใช้งานก็จะยิ่งได้รับการเชื่อมต่อใหม่มากขึ้นเท่านั้น อย่างไรก็ตามโปรดทราบว่าการตั้งค่านี้ต่ำเกินไปอาจทำให้เกิดความเสียหายกับตัวแปรเซสชัน PHP แม้ว่าจะไม่ได้ใช้คุกกี้ตามเซสชันของเบราว์เซอร์ ตัวอย่างเช่น ค่า 300 (5 นาที) อาจดีสำหรับเว็บเซิร์ฟเวอร์ที่ต้องใช้ตัวแปรเซสชันของ PHP สำหรับเวิร์กโฟลว์แอปพลิเคชันเว็บแทนคุกกี้เซสชันของเบราว์เซอร์ ค่า 45 อาจจะดีสำหรับเว็บเซิร์ฟเวอร์ที่ให้บริการได้มากกว่าหน้า Landing Page โฆษณาคงที่ แต่น่ากลัวสำหรับเซิร์ฟเวอร์ที่ต้องใช้ตัวแปรเซสชัน PHP อย่างมาก ดังนั้นแก้ไขพารามิเตอร์ Timeout ในไฟล์นี้เป็นจำนวนที่คุณต้องการ อาจใช้การทดสอบกับหน้าเว็บทั้งหมดของคุณเพื่อดูว่าค่าต่ำเกินไปหรือไม่ อย่างไรก็ตามอาจเป็นความคิดที่ดีที่จะไม่ตั้งค่าไว้สูงกว่า 300 จนกว่าคุณจะพบปัญหาในการอัปโหลดไฟล์ขนาดใหญ่หรือการดาวน์โหลดไฟล์ขนาดใหญ่ แต่จะแย่มากสำหรับเซิร์ฟเวอร์ที่ต้องใช้ตัวแปรเซสชัน PHP อย่างมาก ดังนั้นแก้ไขพารามิเตอร์ Timeout ในไฟล์นี้เป็นจำนวนที่คุณต้องการ อาจใช้การทดสอบกับหน้าเว็บทั้งหมดของคุณเพื่อดูว่าค่าต่ำเกินไปหรือไม่ อย่างไรก็ตามอาจเป็นความคิดที่ดีที่จะไม่ตั้งค่าไว้สูงกว่า 300 จนกว่าคุณจะพบปัญหาในการอัปโหลดไฟล์ขนาดใหญ่หรือการดาวน์โหลดไฟล์ขนาดใหญ่ แต่จะแย่มากสำหรับเซิร์ฟเวอร์ที่ต้องใช้ตัวแปรเซสชัน PHP อย่างมาก ดังนั้นแก้ไขพารามิเตอร์ Timeout ในไฟล์นี้เป็นจำนวนที่คุณต้องการ อาจใช้การทดสอบกับหน้าเว็บทั้งหมดของคุณเพื่อดูว่าค่าต่ำเกินไปหรือไม่ อย่างไรก็ตามอาจเป็นความคิดที่ดีที่จะไม่ตั้งค่าไว้สูงกว่า 300 จนกว่าคุณจะพบปัญหาในการอัปโหลดไฟล์ขนาดใหญ่หรือการดาวน์โหลดไฟล์ขนาดใหญ่

  2. ตอนนี้เริ่มบริการเว็บ Apache ของคุณใหม่ หากคุณทำอะไรผิด Apache จะบอกคุณทันทีที่คุณเริ่มใหม่อีกครั้งและคุณสามารถแก้ไขได้

    sudo service apache2 เริ่มต้นใหม่
  1. ทวนคำแนะนำเบราว์เซอร์แท็บ 10 ซ้ำที่คุณเคยทำก่อนหน้านี้และดูว่าคุณพบข้อผิดพลาดในการกำหนดค่า Apache ในบันทึกข้อผิดพลาดเซิร์ฟเวอร์เว็บ Apache:
    sudo tail -f /var/log/apache2/error.log

... กด CTRL + C เพื่อออกไปจากที่คุณต้องการ

ค้นหาการร้องเรียนเกี่ยวกับการต้องการ MaxRequestWorkers (และเมื่อเร็ว ๆ นี้นับตั้งแต่คุณรีสตาร์ทเว็บเซิร์ฟเวอร์) หากคุณเห็นว่าแม้จะมีการตั้งค่า MaxRequestWorkers ที่ดีที่สุดคุณก็อาจต้องการพลังยิงเพิ่มขึ้นสำหรับเว็บไซต์หรือเว็บแอปพลิเคชันของคุณ พิจารณาตัวเลือกเหล่านี้:

  • การใช้ CDN สำหรับการดาวน์โหลดไฟล์ภาพและสคริปต์ขนาดใหญ่
  • การใช้บริการแคชเช่น CloudFlare หรืออื่น ๆ
  • ทำซ้ำเว็บไซต์หรือกลยุทธ์เว็บแอปพลิเคชันของคุณเพื่อใช้หลายเว็บเซิร์ฟเวอร์ที่ทำหน้าที่เป็น "แอปพลิเคชันเว็บ" หนึ่งเดียวหลังโหลดบาลานเซอร์
  • การเพิ่มแรมให้กับเซิร์ฟเวอร์และทำการคำนวณนี้ซ้ำแล้วซ้ำอีก

  1. ตอนนี้เซิร์ฟเวอร์ Apache ได้รับการปรับแต่งแล้ว คุณจะต้องตรวจสอบในช่วง 2-3 สัปดาห์และมองหาปัญหา MaxRequestWorker ในบันทึกข้อผิดพลาด Apache จากนั้นคุณสามารถตัดสินใจเกี่ยวกับการเพิ่มประสิทธิภาพ (ดูขั้นตอนที่ 10) นอกจากนี้คุณยังสามารถติดตั้ง Munin ด้วย apt บน Ubuntu และดูประสิทธิภาพของ Apache ในช่วงเวลาหนึ่งและทำตามแนวคิดของการเติบโตก่อนที่คุณจะตัดสินใจทำสิ่งใดเกี่ยวกับปริมาณการรับส่งข้อมูลที่เว็บเซิร์ฟเวอร์กำลังจัดการ

“ แม้ว่าลิงก์เหล่านี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงก์อย่างเดียวอาจไม่ถูกต้องหากหน้าการเชื่อมโยงมีการเปลี่ยนแปลง”
Jenny D

@ เจนนี่ดีมาก! ฉันจะทำมัน.
ServerChecker

@Moderator ฉันต้องการความช่วยเหลือในการจัดรูปแบบสำหรับคำตอบนี้ ขั้นตอนที่ 7 ควรจะเป็นไฟล์ conf กับเยื้อง ขั้นตอนที่ 11 ไม่ควรถูกเยื้อง คำสั่งรหัสที่ขึ้นต้นด้วยsudoจำเป็นต้องแสดงเป็นรหัสไม่ใช่ข้อความปกติ ฉันติดตามเอกสารเกี่ยวกับการจัดรูปแบบ แต่ยังคงต่อสู้ที่นี่
ServerChecker

1
ฉันทำในสิ่งที่ทำได้ - markdown ไม่ได้ทำรายการหลากหลายและรหัสดีมาก แต่ฉันคิดว่าฉันสามารถทำให้มันดีขึ้นได้อีกเล็กน้อย
เจนนี่ D

สำหรับ centos มือใหม่อย่างฉัน: ps -lyU apache แทน ps -ylC apache2
user1928596

3

สิ่งที่คุณสามารถยกระดับ MaxRequestWorkers ขึ้นอยู่กับจำนวน RAM ของกระบวนการ httpd / apache แต่ละกระบวนการที่ใช้ หากแต่ละคนใช้เวลามากถึง 50MB (เพียงแค่เลือกหมายเลขสุ่ม) พนักงานที่ขอใช้งาน 20 คนในครั้งเดียว (เช่นการเชื่อมต่อพร้อมกัน) จะใช้พื้นที่ 1GB ดังนั้นในตัวอย่างนั้นคุณสามารถมีได้สูงสุด 8GB * 20 = 160 MaxRequestWorkers อย่างไรก็ตามคุณไม่สามารถใช้ RAM ทั้งหมดสำหรับ apache ได้คุณต้องสำรองบางอย่างสำหรับสิ่งอื่น ๆ ที่ทำงานอยู่ที่นั่น การปล่อยให้ RAM ว่างบางส่วนมีประโยชน์ต่อการทำงานเนื่องจากระบบปฏิบัติการจะใช้เพื่อแคชสิ่งต่าง ๆ และเพิ่มความเร็วในการทำงาน (แม้ว่ามันอาจจะดีกว่าถ้าจะไม่หมดการเชื่อมต่อเมื่อเทียบกับเซิร์ฟเวอร์ที่มีความรวดเร็วเป็นพิเศษ เบราว์เซอร์ของผู้ใช้รอให้การเชื่อมต่อพร้อมใช้งานหากพวกเขาหมดสิ้น)


เป็นวิธีที่ดีในการโปรไฟล์นี้คืออะไร? ฉันสามารถพิมพ์คำสั่งใดเพื่อดูจำนวน RAM ที่กระบวนการ apache ใช้ในการโหลด เรายังต้องการห้องแรมสำหรับ MySQL (ไซต์ WordPress) และกระบวนการของระบบปกติด้วย
ServerChecker

ดูจำนวนกระบวนการที่กำลังทำงานและเรียกใช้freeคำสั่งเพื่อรับหน่วยความจำพื้นฐาน จากนั้นเพิ่มจำนวนกระบวนการที่ทำงานโดยการเพิ่ม MinSpareServers รีสตาร์ท apache ทำงานfreeอีกครั้งและทำคณิตศาสตร์ ตรวจสอบmoreofless.co.uk/apache-memory-usageสำหรับรายละเอียดและคำอธิบายเพิ่มเติม
g491

ตอนนี้ฉันเรียนรู้ว่ามีวิธีที่เร็วที่สุดในการทำสิ่งนี้ มันระบุไว้ในลิงค์ cloudinservice.com ในคำตอบของฉันด้านล่าง คำสั่งคือ ap.sh ที่มีคนคิดออก นอกจากนี้ฉันได้เรียนรู้ว่า MaxClients เปลี่ยนชื่อเป็น MaxRequestWorkers ใน Apache 2.4+ แล้ว
ServerChecker
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.