MaxClients ใน apache จะทราบขนาดของความสำเร็จของฉันได้อย่างไร


9

จากhttp://httpd.apache.org/docs/2.2/misc/perf-tuning.html

ปัญหาฮาร์ดแวร์เดียวที่ใหญ่ที่สุดที่มีผลต่อประสิทธิภาพของเว็บเซิร์ฟเวอร์คือ RAM เว็บเซิร์ฟเวอร์ไม่ควรสลับไปมาเนื่องจากการสลับเพิ่มเวลาแฝงของแต่ละคำขอเกินกว่าจุดที่ผู้ใช้พิจารณาว่า "เร็วพอ" สิ่งนี้ทำให้ผู้ใช้กดหยุดและโหลดซ้ำเพิ่มการโหลดต่อไป คุณสามารถและควรควบคุมการตั้งค่า MaxClients เพื่อให้เซิร์ฟเวอร์ของคุณไม่วางไข่เด็ก ๆ จำนวนมากที่เริ่มทำการแลกเปลี่ยน ขั้นตอนการทำเช่นนี้ง่ายมาก: กำหนดขนาดของกระบวนการ Apache เฉลี่ยของคุณโดยดูที่รายการกระบวนการของคุณผ่านเครื่องมือต่าง ๆ เช่นด้านบนและแบ่งส่วนนี้ออกเป็นหน่วยความจำที่มีอยู่ทั้งหมดของคุณ

ปัญหาหลักคือฉันไม่สามารถเข้าใจขนาดได้เพราะดีฉันมีขนาดของ httpd บนไม่เกิน 3888

แต่ถ้าเราจำเป็นต้องกำหนดจำนวน MaxClients และฉันมี RAM 4GB ดังนั้นฉันจะได้รับ: 972 ดังนั้นฉันควรใช้เช่น 900 ใน MaxClients หรือไม่


4
"ฉันมีขนาดของ httpd บนไม่เกิน 3888" - ฉันคิดว่าฉันพูดกับทุกคนเมื่อฉันพูดว่า "HUH?"
womble

คำตอบ:


9

ก่อนอื่นให้กำหนด PID ของกระบวนการ Apache ของคุณ

จากนั้นคุณสามารถทำสิ่งนี้:

cat /proc/PIDHERE/status | grep VmRSS

สิ่งนี้จะให้ขนาดของผู้อยู่อาศัยในปัจจุบันของกระบวนการนั้นคล้ายกับ:

VmRSS: 304456 kB

ค่านี้จะเป็นตามที่มันเป็นขนาดของถิ่นที่อยู่ในกระบวนการใน RAM

จากนั้นทำให้หน่วยวัดของคุณเป็นปกติ ( 4GB * 1024 * 1024 = 4,194,304 KB) แบ่ง:

4194304 KB / 304456 KB = 13.77 processes

พิจารณาว่าคุณอาจมีกระบวนการอื่นที่ทำงานอยู่ในระบบของคุณซึ่งจะใช้หน่วยความจำด้วยและคุณต้องการลดการแลกเปลี่ยนดังนั้นคุณอาจไม่ต้องการ Apache Apache 13 ตัวที่กำหนดค่า MaxClients (ใช้หมายเลขของฉัน) คุณต้องการจำนวนน้อยกว่า )

นี่คือการประเมินคร่าวๆ ขนาดของกระบวนการ Apache ของคุณอาจเพิ่มขึ้นเมื่อเวลาผ่านไปขึ้นอยู่กับโหลด


1
แม้ว่า RSS จะไม่รวมเพจที่ใช้ร่วมกัน แต่จะรวมเพจที่ถูกตั้งค่าสถานะเป็น copy-on-write นั่นคือมีพื้นที่บนเครื่องสำหรับกระบวนการมากกว่า (ผลรวมของ rss) / (หน่วยความจำกายภาพ) ดูคำตอบของฉันที่อื่น - พื้นที่ว่างเป็นสิ่งจำเป็นสำหรับการทำงานที่ดี
symcbean

4

การคาดการณ์ maxClients จากสถานการณ์การทดสอบเป็นจุดเริ่มต้น - แต่เพื่อแก้ปัญหาอย่างถูกต้องคุณต้องเริ่มต้นวัดว่าแอปพลิเคชันของคุณทำงานอย่างไรกับปริมาณการใช้งานจริง

สมมติว่าอาปาเช่ของคุณกำลังเรียกใช้ pre-fork ....

ตั้งค่างาน cron เพื่อนับจำนวนกระบวนการ httpd และเอาต์พุตของ 'ฟรี' โปรดทราบว่าหากเว็บเซิร์ฟเวอร์ของคุณแสดงเนื้อหาใด ๆ จากไฟล์ในเครื่อง (และในหลายกรณีแม้ว่าจะไม่ใช่) จำนวนหน่วยความจำที่มีให้สำหรับแคช / บัฟเฟอร์จะมีผลกระทบอย่างมากต่อประสิทธิภาพการทำงาน เช่นถ้าคุณไปถึงจุดเปลี่ยนการใช้งานเว็บของคุณน่ากลัวมาก!

เมื่อคุณได้รับข้อมูลบางส่วนแล้วให้พล็อตมันลงบนแผนภูมิและทำการถดถอยแบบสี่เหลี่ยมอย่างน้อย - ประเมินเพื่อหาจำนวนลูกค้าที่คุณใช้งานถึงขีด จำกัด เป้าหมายสำหรับการใช้หน่วยความจำ httpd จุดเริ่มต้นสำหรับเป้าหมายหน่วยความจำจะน้อยกว่า 80% ของหน่วยความจำกายภาพ / 80% ของขนาดเนื้อหา

(หมายเหตุหากคุณตั้งค่า MinSpareServers เป็นค่าที่สูงมากผลลัพธ์อาจไม่ถูกต้อง)

#!/bin/bash

LOGFILE='/var/log/httpd/memusage'
PIDS = `ps -ef | grep httpd | grep -v grep | wc -l`
MEM = `free | grep 'buffers/cache'`
DAY = `date '%Y-%m-%d %H:%M:%S'`
echo ${DAY} ${PIDS} ${MEM} >>LOGFILE

ในโลกอุดมคติคุณจะวัดเวลาตอบสนอง URL ในไฟล์บันทึกเดียวกัน - แต่มันก็ซับซ้อนกว่ามาก


สำหรับฉันบัฟเฟอร์ / แคชเปลี่ยนแปลงน้อยมากไม่ว่าจะรัน 11 ไคลเอนต์หรือเมื่อเซิร์ฟเวอร์ถึง 86 หรือ 151 ไคลเอ็นต์ (และเซิร์ฟเวอร์ขัดข้อง) สิ่งที่คุณคาดหวังที่จะเห็นในตัวแปร MEM ของคุณ? ฉันได้ตัวเลขสองตัวแล้วดังนั้นสงสัยว่า Ubuntu 12.04 จะให้อะไรอย่างอื่นที่คุณคาดไม่ถึง
PeterB

ลองใช้ 'ฟรี' และคุณจะเห็นสิ่งที่ฉันคาดหวัง (2 หมายเลข) หากเป็นความจริงที่ว่าตัวเลขเหล่านี้มีความแตกต่างกันเล็กน้อยด้วยจำนวนกระบวนการที่ต่างกันแสดงว่าคุณกำลังเรียกใช้เซิร์ฟเวอร์ตามเหตุการณ์หรือการตั้งค่า maxspareservers ของคุณนั้นไร้สาระ หากคุณโพสต์ตัวอย่างผลลัพธ์และส่วนที่เกี่ยวข้องของ httpd.conf ของคุณเราอาจมีภาพที่ดีกว่านี้หรือไม่
symcbean

.... และ "ผิดพลาด" อะไรผิดพลาด?
symcbean

ขออภัยดูpastebin.com/aHZCagVnสำหรับการตั้งค่า httpd.conf และเอาต์พุตตัวอย่าง โดย 'crash' ฉันหมายถึงไคลเอนต์มากเกินไปเซิร์ฟเวอร์มีหน่วยความจำไม่เพียงพอและล็อค โปรดดูpastebin.com/fnXzBfQLเพิ่มเติม
PeterB

1
@ PeterB ดูเหมือนว่า MySQLd จะทำให้เกิดปัญหานี้ เมื่อนักฆ่า OOM ของเคอร์เนลเตะฆ่าผู้กระทำผิดที่เลวร้ายที่สุดอันดับแรกขึ้นอยู่กับค่าของ / proc / PID / oom_score_adj จากหลักฐานในผลลัพธ์ของคุณ mysqld ไปก่อน คุณอาจต้องปรับการตั้งค่าใน my.cnf ให้เหมาะสมยิ่งขึ้นเพื่อให้เหมาะสมกับข้อ จำกัด ของ VM ของคุณ ในฐานะ / ชั่วคราว / วิธีแก้ปัญหาเพียงเพื่อดูว่าคุณสามารถหลีกเลี่ยงการเตะ OOM killer ลองเพิ่ม swapfile สำหรับหน่วยความจำเสมือนเพิ่มเติม จากนั้นกำจัดออกเมื่อคุณพบปัญหาจริงของคุณแล้ว
loopforever
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.