ค่าที่เหมาะสมที่สุดสำหรับคำสั่ง ServerLimit, MaxClients, MaxRequestsPerChild


29

ฉันใช้งานเว็บไซต์ที่มีปริมาณการใช้งานเนื้อหาแบบไดนามิกจำนวนมากซึ่งส่วนใหญ่สร้างโดยผู้ใช้

เซิร์ฟเวอร์เป็นเซิร์ฟเวอร์เฉพาะและมีซีพียู Intel (R) Xeon (R) X3210 @ 2.13GHz จำนวน 4 ตัว ฉันจำเป็นต้องรู้ถึงคุณค่าที่ดีที่สุดสำหรับคำสั่ง ServerLimit และ MaxClients ของ apache เนื่องจากเซิร์ฟเวอร์มี RAM 4GB และฐานข้อมูล MySQL ทำงานบนเซิร์ฟเวอร์แยกต่างหาก พาเนลคือ DirectAdmin พร้อม CentOS

ด้านล่างเป็นคำสั่งปัจจุบันของฉัน แต่ในช่วงชั่วโมงเร่งด่วนที่มีผู้ใช้มากกว่า 5k ความล่าช้าที่สำคัญถูกสังเกตเห็น - และมันไม่ใช่ความผิดทั้งหมดของ MySQL เพราะหน้าดูเหมือนจะสร้างขึ้นอย่างรวดเร็ว (ฉันใช้ตัวนับเวลาในการสร้างหน้าเว็บ) ความล่าช้าในการเชื่อมต่อจนกระทั่งเพจเริ่มตอบสนองและถูกส่งไปยังเบราว์เซอร์

<IfModule prefork.c>
    StartServers     800
    MinSpareServers   20
    MaxSpareServers   60
    ServerLimit      900
    MaxClients       900
    MaxRequestsPerChild  2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5

ฉันควรพูดถึงว่าการตรวจสอบเซิร์ฟเวอร์โดยใช้คำสั่ง top การใช้งาน CPU จะไม่เกินกว่า 20% ~ 30% ในชั่วโมงเร่งด่วน เซิร์ฟเวอร์ MySQL นั้นมีการใช้งาน 30 ~ 50% ในเวลานั้นและฉันกำลังทำงานอย่างต่อเนื่องเพื่อแก้ไขข้อความค้นหาที่ช้า แต่นั่นเป็นปัญหาที่แตกต่าง ฉันรู้ว่าไม่ใช่คอขวด DB เพราะหน้าเว็บแบบสแตติกใช้เวลาโหลดนานในชั่วโมงเร่งด่วน

คำแนะนำใด ๆ เพื่อเพิ่มประสิทธิภาพค่าเหล่านี้จะได้รับการชื่นชมอย่างมากขอบคุณ

คำตอบ:


24

MaxClients ของคุณเป็นวิธี WAY WAY สูงเกินไป ขนาดปัจจุบันของกระบวนการ apache ของคุณคืออะไร? ทวีคูณที่ x 900 นั่นมากกว่า 4GB หรือเปล่า? ถ้าเป็นเช่นนั้นเครื่องน่าจะเปลี่ยน ฉันมักจะเริ่มต้นด้วย MaxClients = 2x vCPUs ในกล่อง (grep -c processor / proc / cpuinfo) ซึ่งในกรณีนี้จะประมาณ 8 จากนั้นตรวจสอบให้แน่ใจว่าขนาดกระบวนการ MaxClients x apache ไม่เกิน 4GB

คุณสามารถเพิ่ม MaxClients ของคุณได้จากที่นั่นขึ้นอยู่กับประเภทของการเชื่อมต่อที่ลูกค้าของคุณมี (ผู้ใช้งานผ่านสายโทรศัพท์ต้องได้รับการใส่ช้อน ฯลฯ ) แต่ให้แน่ใจว่าคุณจะไม่ทำให้สถานการณ์ตกต่ำ

จากนั้นตั้งค่าเซิร์ฟเวอร์ Min, Max และ Start ของคุณเป็น MaxClients ไม่จำเป็นต้องให้ความแตกต่างในสภาพแวดล้อมเซิร์ฟเวอร์เฉพาะ

จากนั้นทำการทดสอบด้วย ab (เช่นบันทึกห่าน)


ด้วยเหตุผลบางอย่างดูเหมือนว่าฉันได้กำหนดขนาดของกระบวนการอย่างไม่ถูกต้อง ... ตอนนี้ฉันเห็นในคำสั่งด้านบนว่ากระบวนการขนาด apache มีขนาดตั้งแต่ 10 ถึง 15MB ฉันอ่านบางที่ว่าเนื่องจากไลบรารีที่ใช้ร่วมกันรวมอยู่ในจำนวนนี้ขนาด "ของจริง" จึงมีขนาดครึ่งหนึ่ง เมื่อพิจารณาถึงสิ่งนี้ฉันควรคำนวณว่าฉันสามารถรองรับกระบวนการ 570 รายการที่มีขนาด 7 MB แต่ละรายการคุณคิดว่าถูกต้องหรือไม่
andreszs

ฉันขอแนะนำให้คุณใช้ 15 MB สำหรับการคำนวณแล้วเริ่มตรวจสอบตัวชี้วัด: # http กระบวนการเทียบกับการใช้หน่วยความจำ สิ่งนี้จะทำให้คุณมีความคิดที่ดีขึ้นสำหรับจำนวน MaxClients
hdanniel

1
ฉันลดลงเหลือ 400 และแม้กระทั่งก่อนชั่วโมงเร่งด่วนผลลัพธ์จะมีผลตรงกันข้ามกับที่ต้องการ: ค่าใด ๆ ที่ต่ำกว่าค่าเดิมจะสร้างการหมดเวลาและการล่าช้าที่ยาวนาน ที่จริงแล้วตอนนี้ฉันเพิ่มลูกค้า 1500 คนและการใช้หน่วยความจำตอนนี้อยู่ที่ 3 GB ในขณะที่การใช้ CPU โดยเฉลี่ยคือ 8% แน่นอนว่ามีการโหลดบนเซิร์ฟเวอร์ SQL มากขึ้นในตอนนี้และฉันจะต้องทำงานต่อไป
andreszs

นี่คือคำสั่ง htop ของฉันในตอนนี้กระบวนการของ apache 1500 และกระบวนการของระบบเกือบ 100 กระบวนการ นี่คือ 75% ของการใช้ RAM a.imagehost.org/0011/htop.png คุณควรพิจารณาสูตรของคุณใหม่หรือไม่? ;)
andreszs

1
นี่คือเหตุผลที่คุณต้องทำการทดสอบในสภาพแวดล้อมของคุณเอง เรามีตัวเร่งความเร็ว http หน้า apache ของเราดังนั้นพวกเขาจึงไม่ป้อนข้อมูลผู้ใช้มือถือ แอปพลิเคชันของคุณดูเหมือนจะเบามาก หากคุณย้ายภาระไปยังฐานข้อมูลของคุณที่บอกฉันว่ามีกระบวนการ apache มากกว่านั้นที่ให้บริการข้อมูลเทียบกับการนั่งรอการเชื่อมต่อ mysql ซึ่งทำให้ฉันถามจำนวนการเชื่อมต่อที่คุณอนุญาตให้ DB ของคุณ หมายเลขนั้นเกิน MaxClients ของคุณหรือไม่ คุณมี 5,000 การเชื่อมต่อพร้อมกัน? ถ้าเป็นเช่นนั้นคุณอาจต้องการมองหาสิ่งที่คล้ายกับเพอร์บัลด้านหน้า
toppledwagon

5

คุณต้องได้ขนาดเฉลี่ยของกระบวนการ apache ของคุณ ด้วยหมายเลขนี้และขนาดรวมของ RAM ของคุณคุณสามารถคำนวณคำสั่ง MaxClients จดจำสิ่งนี้: "ผู้ใช้เว็บไม่ควรสลับ" ( การปรับประสิทธิภาพ Apache )

การตรวจสอบกับด้านบนหรือ htop ก็โอเค แต่คุณต้องการมุมมองที่ดีขึ้นของสถิติทั้งหมดของเซิร์ฟเวอร์ของคุณ (cpu, ram, ดิสก์ i / o, คำขอ Apache, แบบสอบถามช้า mysql, ฯลฯ ... ) ด้วยเครื่องมือตรวจสอบบางอย่างเช่น ganglia หรือ munin ค้นหาคอขวดที่เป็นไปได้


ในขณะนี้ฉันมีคำสั่งด้านบนและ htop เท่านั้นและฉันไม่สามารถเข้าใจข้อมูลทั้งหมดได้ นี่เป็นกิจกรรมเมื่อวานนี้ในชั่วโมงเร่งด่วนดูเหมือนว่าจะไม่มีการแลกเปลี่ยน โปรดบอกฉันว่าฉันผิด: งาน: 1043 ผลรวม 2 วิ่ง, 1041 นอนหลับ, 0 หยุด, 0 ซอมบี้ซีพียู: 13.8% เรา, 1.8% sy, 0.0% ni, 0.0% ni, 82.1% id, 0.8% wa, 0.0% hi, 1.5% si, 0.0% st Mem: รวม 4138360k, ใช้ 3961276k, ฟรี 177084k, 75016k บัฟเฟอร์ Swap: รวม 2,031608k, ใช้ 14,14kk, 2030124k แคช, 1836600k แคช
andreszs

ใช่เซิร์ฟเวอร์ของคุณไม่ได้ทำการแลกเปลี่ยน ฉันชอบตัวชี้วัดในชีวิตจริง แต่ถ้าคุณต้องการคุณสามารถใช้เครื่องมือที่ทำให้เกิดความเครียดเช่น ab หรือ httperf เพื่อตรวจสอบว่าเซิร์ฟเวอร์ของคุณสามารถจัดการได้มากแค่ไหน สำหรับการทดสอบดูแล MaxClients และเริ่มต้นด้วยตัวเลขต่ำ (ตามสมมติฐาน 15MB)
hdanniel

4

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

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

ค่าเฉลี่ยการโหลดของคุณก็บอกได้เยอะ ฉันสงสัยว่าการใช้งานของคุณจะสูงกว่าจำนวนคอร์ทั้งหมดจากซีพียู 20-30% แต่เป็นตัวบ่งชี้ว่าเซิร์ฟเวอร์ของคุณทำงานหนักแค่ไหน


ปัญหาคือฉันไม่ได้มีประสบการณ์เพียงพอในการดูแลเซิร์ฟเวอร์ดังนั้นเริ่มเล่นด้วยการมอบหมายและติดตามผล .. ฉันไม่เคยใช้เครื่องมือ ab เพื่อความซื่อสัตย์ การเปลี่ยนค่ายังต้องการการรีสตาร์ท HTTDP ซึ่งทำให้ผู้ใช้ของฉันไม่สะดวกดังนั้นฉันจึงต้องการหลีกเลี่ยงปัญหานี้ ลองนึกภาพคุณกำลังส่งข้อความถึงผู้ใช้รายอื่นและหลังจากคลิก "ส่ง" คุณจะได้รับปัญหาการเชื่อมต่อเซิร์ฟเวอร์ ในการใช้งาน CPU ดูข้อมูลจากความคิดเห็นก่อนหน้าของฉัน: มันไม่เกิน 15% ในชั่วโมงเร่งด่วน ฉันคิดว่ามันค่อนข้างเป็นที่ยอมรับเมื่อพิจารณาว่าฉันมีผู้ใช้งานออนไลน์ 6,000 คนเมื่อวานนี้
andreszs

แน่นอนฉันไม่ต้องการให้คุณทำเช่นนี้ในสภาพแวดล้อมการผลิต ฉันขอแนะนำให้ทำสิ่งนี้ในเวลาที่มีการรับส่งข้อมูลน้อยที่สุดหากเซิร์ฟเวอร์อื่น (ที่มีฮาร์ดแวร์ใกล้เคียงกันหากไม่ใช่ฮาร์ดแวร์ที่เหมือนกัน) ในการทดสอบ ab นั้นใช้งานค่อนข้างง่าย แต่ฉันคิดว่าโทปเปิ้ลวันก็ให้คำแนะนำที่ดีในการคำนวณ MaxClients ของคุณ เมื่อคุณหยุดใช้พื้นที่สว็อปคุณจะเห็นการปรับปรุงที่ชัดเจน ตรวจสอบhttpd.apache.org/docs/2.0/programs/ab.htmlและcyberciti.biz/tips/...สำหรับ AB
ห่าน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.