จำกัด การใช้งาน Apache 2 หน่วยความจำ


9

ฉันใช้งานเว็บเซิร์ฟเวอร์อดิเรกจาก Blue & White G3 / 300 โบราณที่ใช้ Debian PPC Squeeze 2.6.30 ประสิทธิภาพไม่เป็นเวลาพักหนึ่งหลังจากการรีสตาร์ท แต่ในที่สุดจะได้รับมากขึ้นเรื่อย ๆ ตอนนี้ใช้เวลา 76 วันและผู้ร้ายหลักดูเหมือนจะใช้หน่วยความจำของกระบวนการ 10+ apache2

ฉันคิดว่าฉันต้องลดค่าสำหรับStartServers, MinSpareServersและ / หรือMaxSpareServersแต่ผมไม่แน่ใจว่าเป็นที่หนึ่งในการปรับและมีสามส่วนสำหรับแต่ละซึ่งขึ้นอยู่กับโมดูล MPM ในการใช้งาน

ฉันจะบอกได้อย่างไรว่าส่วนใดต่อไปนี้ที่ฉันต้องเปลี่ยนและอะไรคือค่าที่สมเหตุสมผลเนื่องจากกล่องนี้มีหน่วยความจำกายภาพ 448 MB (ประวัติการอัพเกรดแปลก ๆ ของแต่ละอัน 64, 128 และ 256 แท่ง)

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

ไม่มีกรณีอื่น ๆ ของ StartServers ใน apache2.conf ของฉัน แต่ไม่มีผู้โมดูล MPM ปรากฏในหรือmods-available mods-enabledไอเดีย?

ขอบคุณ!


ฉันได้สมมติว่ากล่องของคุณมีหน่วยความจำเหลือน้อย (และประสิทธิภาพการทำงานของหมัดของคุณมาจากการแลกเปลี่ยนอย่างหนัก) หากคุณไม่ได้แลกเปลี่ยนฉันจะบั๊กคุณสำหรับรายละเอียดเพิ่มเติม :-)
voretaq7

คำตอบ:


6

วันนี้ 400MB ไม่มากสำหรับเว็บเซิร์ฟเวอร์ - คุณอาจต้องเปลี่ยนกล่อง :)

ที่กล่าวว่าหากการใช้หน่วยความจำของคุณเป็นบอลลูนคุณอาจมีหน่วยความจำรั่วบางแห่ง - สำหรับการทดสอบอย่างรวดเร็วดูขนาดของกระบวนการ httpd ตอนนี้แล้วหยุด / เริ่ม Apache และดูว่าพวกเขามีขนาดเล็กลงมาก หากพวกเขาดูพวกเขาสองสามวันและดูว่าพวกเขาเติบโต

ถ้ามันเป็นหน่วยความจำรั่วทางออกที่แท้จริงสำหรับการค้นหาและแก้ไขการรั่วไหลของหน่วยความจำ แต่เนื่องจากโดยปกติแล้วจะเป็นความเจ็บปวดในตูดคุณจึงสามารถปรับMaxRequestsPerChildให้เข้ากับสิ่งอื่นที่ไม่ใช่ 0 (ไม่ จำกัด จำนวน) สิ่งนี้จะฆ่าคนงาน Apache เมื่อพวกเขาได้ให้บริการตามจำนวนคำขอที่กำหนดไว้ (บังคับให้พวกเขายกเลิกหน่วยความจำที่รั่วไหลในกระบวนการ

เริ่มต้นด้วยค่าที่มากขึ้น (เป็นหลักพันหรือมากกว่านั้น) จากนั้นทำการเรียงร้อยเป็นร้อย หากคุณได้รับคำขอต่ำกว่า 100 ครั้งต่อเด็กหนึ่งหน่วยความจำของคุณมีขนาดใหญ่พอที่จะรับประกันได้ว่าการแก้ไขนั้นถูกต้องเนื่องจากประสิทธิภาพที่ได้รับจากการฆ่าอย่างต่อเนื่อง


Re: MPM preforkซึ่งการปรับคำตอบคือเกือบจะแน่นอน
คุณสามารถเรียกใช้httpd -Vและค้นหาServer MPM:บรรทัดที่จะบอกคุณแน่นอน


1
-V ให้ข้อมูล prefork ที่ฉันต้องการ (ถึงแม้ว่าจะเป็น apache2 -V ในกรณีของฉัน) ขอบคุณ!
UltraNurd

ดูเหมือนว่าจะได้ทำเคล็ดลับ ฉันคิดว่าปัญหาคือว่าฉันมีหน่วยความจำกายภาพไม่เพียงพอและการแลกเปลี่ยนเพราะเซิร์ฟเวอร์ลูกมากเกินไป และใช่ฉันรู้เซิร์ฟเวอร์เก่าแล้ว แต่มันแทบจะจัดการกับคำขอใด ๆ : oD
UltraNurd

1
หากคุณไม่ได้จัดการคำขอจำนวนมากคุณยังสามารถตัดแต่งเซิร์ฟเวอร์เริ่มต้นและอะไหล่นับตามที่คุณกล่าวถึงในโพสต์ดั้งเดิมของคุณ (ในระบบการพัฒนาฉันตั้งให้ทุกสิ่งระหว่าง 2 และ 5 เพื่อลดการใช้ RAM)
voretaq7

ฉันลงเอยด้วยการทิ้ง min และ max spares ไว้ที่ 3 และ 6 จาก 5 และ 10 และนั่นดูเหมือนว่าจะเหลือ RAM เพียงพอที่จะป้องกันไม่ให้สิ่งต่าง ๆ เปลี่ยน ขอบคุณ!
UltraNurd

1

เพื่อ จำกัด การใช้หน่วยความจำของกระบวนการ apache คุณจะต้องปรับ MaxClients

กฎทั่วไปของหัวแม่มือคือ: (หน่วยความจำสูงสุดที่ต้องการ) / (การใช้หน่วยความจำของกระบวนการ Apache 1) = # ไคลเอนต์สูงสุด

ในท้ายที่สุดคุณยังต้องปรับตัวให้เป็นของคุณMaxSpareServers <= ลูกค้าสูงสุด

การใช้หน่วยความจำของกระบวนการเดียวนั้นขึ้นอยู่กับโมดูลที่คุณโหลด (php เป็นต้น) ดังนั้นคุณอาจต้องการตั้งค่าไคลเอนต์สูงสุดให้ต่ำลงเล็กน้อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.