พารามิเตอร์หลักสำหรับการใช้หน่วยความจำ tweaking ของ Apache MaxClients
จะ ค่าต่ำเกินไปและคุณจะใช้งานสล็อตที่ว่างเพื่อให้บริการคำขอของลูกค้า มากเกินไปและคุณจะใช้ RAM ทั้งหมดของคุณและเริ่มใช้พื้นที่สว็อปซึ่งจะทำให้ประสิทธิภาพการทำงานลดลง (อาจดูเหมือนว่าเซิร์ฟเวอร์เสีย)
วิธีหนึ่งในการปรับแต่งMaxClients
คือการสังเกตการใช้งานหน่วยความจำของระบบและปรับแต่งการตั้งค่าขึ้น / ลงตามต้องการ หากเซิร์ฟเวอร์เริ่มสลับการแก้ไขมันลง หากเซิร์ฟเวอร์มีหน่วยความจำว่างให้วางไว้
คุณสามารถประมาณค่าสูงสุดโดยดูที่การใช้หน่วยความจำของ Apache เริ่มtop
และกดM
เพื่อเรียงลำดับกระบวนการตามหน่วยความจำ คุณควรเห็นบางสิ่งเช่น:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
ลบคอลัมน์ RES และ SHR เพื่อรับการใช้หน่วยความจำโดยประมาณต่อ Apache เช่น ในกรณีนี้มันประมาณ 16MB หากฉันมี RAM 4GB และต้องการ 3GB สำหรับใช้กับ Apache การตั้งค่า MaxClients ของฉันจะอยู่ที่:
MaxClients = 3000/16 = 188
ดังนั้นในกรณีนี้ฉันอาจเริ่มต้นด้วยค่า 150-200 แต่ฉันจะดูการใช้งานหน่วยความจำและถ้ามันเริ่มเข้าใกล้โดยใช้ swap ฉันจะลด MaxClients 10-20% นอกจากนี้โปรดทราบว่าค่าของ 3GB เป็นเพียงตัวอย่างแบบสุ่ม บนเซิร์ฟเวอร์ที่ใช้ Apache เท่านั้นฉันอาจสามารถใช้ 4GB เกือบทั้งหมดได้ ในกรณีอื่น ๆ ฉันอาจต้องการเพียง 1 หรือ 2GB สำหรับ Apache บันทึกส่วนที่เหลือสำหรับแอปพลิเคชันอื่น ๆ ระบบหรือแคช
แก้ไข:ตอบคำถามเพิ่มเติม
โดยทั่วไปจะไม่มีค่าเวทมนต์ของ MaxClients หรือพารามิเตอร์การกำหนดค่า Apache อื่น ๆ ที่จะทำให้เซิร์ฟเวอร์ของคุณเร็วขึ้นเป็นสองเท่า บางเซิร์ฟเวอร์จะทำงานได้ดีไม่ว่า MaxClients จะเป็น 10 หรือ 1,000 มีสองกรณีหลักที่การตั้งค่า MaxClients นั้น "แย่":
- ต่ำเกินไป : เมื่อ MaxClients ต่ำเกินไปคุณจะเข้าถึงสถานการณ์ที่มีการใช้งานไคลเอนต์ Apache ทั้งหมดและการเชื่อมต่อใหม่เข้าสู่คิวเพื่อรอให้ไคลเอนต์ถัดไปพร้อมใช้งาน หากคุณเปิดใช้งาน mod_status ของ Apache คุณสามารถรับมุมมองแบบเรียลไทม์ว่ามีลูกค้าจำนวนเท่าใดที่ไม่ว่าง ณ จุดใดจุดหนึ่ง สถานะนี้ค่อนข้างง่ายต่อการวินิจฉัยเนื่องจากไซต์จะช้าในช่วงที่มีการรับส่งข้อมูลสูงและลูกค้าทั้งหมดสามารถสังเกตได้ว่ากำลังใช้งานอยู่
- สูงเกินไป : เมื่อ MaxClients สูงเกินไปคุณจะเข้าสู่กรณีหมด RAM ทั้งหมดและเริ่มใช้การแลกเปลี่ยน เมื่อสิ่งนี้เกิดขึ้นประสิทธิภาพของไซต์ของคุณจะลดลงถึงศูนย์ (พิจารณาความแตกต่างของความเร็วระหว่าง RAM และดิสก์) สถานะนี้อาจเป็นเรื่องยากที่จะสังเกตและวินิจฉัยเนื่องจากเซิร์ฟเวอร์จะทำงานได้ดีกับ MaxClients สูงจนกว่าจะพบปัญหาการรับส่งข้อมูลเพิ่มขึ้น ตัวอย่างเช่นบนเว็บไซต์ที่ได้รับความนิยมไม่กี่ชั่วโมงต่อชั่วโมงฉันสามารถตั้งค่า MaxClients เป็น 1,000 ได้มากกว่า RAM ที่รองรับ แต่ไม่เคยเห็นปัญหาเนื่องจาก Apache เพียงต้องการใช้ไคลเอ็นต์หนึ่งหรือสองครั้งต่อครั้ง ฉันจะเห็นปัญหาเมื่อฉันได้รับการจราจรเพิ่มขึ้นจำนวนลูกค้าที่ใช้พร้อมกันจนกว่า RAM จะหมดและจำเป็นต้องมีพื้นที่สว็อป
ในขณะที่ฉันไม่ทราบรายละเอียดของเซิร์ฟเวอร์แอปพลิเคชันหรือการรับส่งข้อมูลของฉันฉันสามารถแนะนำค่าการกำหนดค่าต่อไปนี้เป็นจุดเริ่มต้น ลองตรวจสอบโหลดเซิร์ฟเวอร์และการใช้งานและเปลี่ยนการตั้งค่าตามต้องการ
- mod_status : เปิดใช้งานสิ่งนี้เพื่อให้คุณสามารถเห็นการใช้งานของ Apache สำหรับสถิติขั้นสูงเพิ่มเติมให้ติดตั้งแอพพลิเคชั่นตรวจสอบอย่าง Zabbix / Nagios เพื่อให้คุณสามารถติดตามการใช้งานเซิร์ฟเวอร์และรูปแบบการรับส่งข้อมูล
- MaxClients : ตั้งค่าเป็น 100-200 ฉันจะเริ่มต้นด้วยค่าที่ต่ำกว่าหากไม่แน่ใจและตรวจสอบการใช้งานหน่วยความจำ / CPU / Apache นี่จะเป็นพารามิเตอร์หลักในการปรับแต่ง
- MaxRequestsPerChild : สิ่งนี้ระบุว่าเมื่อใดที่ไคลเอนต์ Apache / ลูกจะถูกรีสตาร์ท ไม่มีค่าที่ผิด (แม้ว่าค่าที่น้อยมากอาจไม่มีประสิทธิภาพ) และจะขึ้นอยู่กับเนื้อหาที่คุณให้บริการ สำหรับเนื้อหาแบบไดนามิกค่าที่ไม่เป็นศูนย์ขนาดใหญ่ (กล่าว 1,000) จะหยุดกระบวนการ httpd ของคุณในที่สุดกลายเป็นขนาดใหญ่เกินไป
- พารามิเตอร์อื่น ๆ : ในขณะที่ฉันยังไม่ได้ทำการเปรียบเทียบพารามิเตอร์ที่เหลืออย่างละเอียดพวกเขาควรมีผลกระทบเล็กน้อยหากคุณตั้งค่าต่ำหรือสูงมาก การใช้ค่าเริ่มต้นควรใช้ได้กับเว็บไซต์ส่วนใหญ่ ดูเอกสารประกอบApache PreforkหรือWorkerสำหรับคำอธิบายที่สมบูรณ์ของพารามิเตอร์และใช้ในแต่ละโมดูล (ไม่มีจุดพยายามปรับพารามิเตอร์ที่คุณไม่ได้ใช้)
- การเปรียบเทียบ : ในขณะที่คุณปรับพารามิเตอร์ฉันอยากจะแนะนำให้ใช้เครื่องมือการเปรียบเทียบเช่น ab (ApacheBench) หรือการล้อมเพื่อให้ได้จำนวนเชิงปริมาณเกี่ยวกับความสามารถของเซิร์ฟเวอร์ของคุณ การพึ่งพาอาศัยความรู้สึกหรือแย่ลงการดูว่ามันขัดข้องหรือไม่ไม่ใช่วิธีที่ดีในการปรับพารามิเตอร์ของเว็บเซิร์ฟเวอร์