การเพิ่มประสิทธิภาพการใช้หน่วยความจำ Apache


11

Apache ใช้หน่วยความจำเซิร์ฟเวอร์ของฉันมากเกินไปจนทำให้เกิดข้อผิดพลาด ฉันมี RAM 4GB ในเซิร์ฟเวอร์

ฉันพยายามปรับการตั้งค่า Apache ให้ละเอียดเพื่อปรับปรุงประสิทธิภาพ แต่ฉันค่อนข้างใหม่ในเรื่องนี้

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

คนอ่านของฉันชอบ:

11697 apache    15   0  322m  37m 4048 S  0.0  0.9   0:00.52 httpd
13602 apache    15   0  323m  37m 3944 S  0.0  0.9   0:00.50 httpd
11786 apache    15   0  322m  36m 4052 S  0.0  0.9   0:00.50 httpd
12525 apache    15   0  322m  36m 4040 S  0.0  0.9   0:00.63 httpd
11806 apache    15   0  322m  36m 3952 S  0.0  0.9   0:00.42 httpd
11731 apache    15   0  322m  36m 4036 S  0.0  0.9   0:00.46 httpd
11717 apache    16   0  322m  36m 3956 S  0.0  0.9   0:00.54 httpd
11659 apache    15   0  322m  36m 3980 S  0.0  0.9   0:00.49 httpd

ดังนั้นมันจะเป็น

MaxClients = 3000/ (322-37) = 10

นั่นถูกต้องใช่ไหม? นอกจากนี้สิ่งที่ควรเป็นค่าสำหรับพารามิเตอร์อื่น ๆ เช่น MinSpareServers, MaxSpareServers, MaxRequestsPerChild, StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxRequestsPerChild?

มีคนช่วยฉันด้วยไหม

ปรับปรุง

ฉันได้ลองสิ่งที่พวกคุณแนะนำแล้ว มันใช้งานได้ แต่เพียงชั่วครู่ หลังจากนั้นสักครู่หลังจากที่เซิร์ฟเวอร์เริ่มใช้งานหน่วยความจำจะเพิ่มขึ้นเรื่อย ๆ

ฉันหมายความว่าหลังจากฉันเริ่มเซิร์ฟเวอร์ลองสมมติว่ามีผู้ใช้ 500 คนออนไลน์ เซิร์ฟเวอร์จะใช้ X RAM 2 ชั่วโมงหลังจากนั้นมีผู้ใช้ 500 รายออนไลน์เซิร์ฟเวอร์จะใช้งานแรม 10 เท่า

มีวิธีที่จะหลีกเลี่ยงปัญหานี้หรือไม่ฉันจะต้องเฝ้าดูเซิร์ฟเวอร์และเริ่มใหม่เป็นครั้งคราว?


1
เมื่อเพิ่มการอัปเดตคำถามของคุณโปรดแก้ไขต้นฉบับแทนที่จะโพสต์คำตอบ นอกจากนี้ยังมีโบนัสเพิ่มเติมในการชนคำถามที่ด้านบนของหน้าแรกอีกครั้ง
Ben Pilbrow

คำตอบ:


14

พารามิเตอร์หลักสำหรับการใช้หน่วยความจำ 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) หรือการล้อมเพื่อให้ได้จำนวนเชิงปริมาณเกี่ยวกับความสามารถของเซิร์ฟเวอร์ของคุณ การพึ่งพาอาศัยความรู้สึกหรือแย่ลงการดูว่ามันขัดข้องหรือไม่ไม่ใช่วิธีที่ดีในการปรับพารามิเตอร์ของเว็บเซิร์ฟเวอร์

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