วิธีการกำหนดค่า nginx เพื่อให้บริการเนื้อหาคงที่จาก RAM?


11

ฉันต้องการตั้งค่า Nginx เป็นเว็บเซิร์ฟเวอร์ของฉัน ฉันต้องการให้ไฟล์ภาพแคชในหน่วยความจำ (RAM) มากกว่าดิสก์ ฉันกำลังให้บริการหน้าเล็ก ๆ และต้องการภาพไม่กี่ภาพจาก RAM เสมอ ฉันไม่ต้องการใช้วานิช (หรือเครื่องมืออื่น ๆ ) เพราะฉันเชื่อว่า Nginx มีความสามารถในการแคชเนื้อหาลงใน RAM ฉันไม่แน่ใจว่าจะกำหนดค่า Nginx ได้อย่างไร? ฉันลองใช้ชุดค่าผสมสองสามตัว แต่ไม่ได้ผล Nginx ใช้ดิสก์ตลอดเวลาเพื่อรับรูปภาพ

ตัวอย่างเช่นเมื่อฉันลอง Apache มาตรฐานเพื่อทดสอบด้วยคำสั่งต่อไปนี้:

ab -c 500 -n 1000 http://localhost/banner.jpg

ฉันได้รับข้อผิดพลาดต่อไปนี้:

socket: Too many open files (24)

ฉันเดาว่านี่หมายความว่า Nginx พยายามเปิดไฟล์มากเกินไปพร้อมกันจากดิสก์และระบบปฏิบัติการไม่อนุญาตการดำเนินการนี้ ใครช่วยกรุณาแนะนำฉันกำหนดค่าที่ถูกต้อง?


คุณเกือบจะคาดเดาผิด นอกจากนี้คุณจะได้รับข้อผิดพลาดจากที่ไหน
womble

@ womble ตามที่ฉันแสดงความคิดเห็นด้านล่างปัญหาอาจเกิดขึ้นพร้อมกัน มีหลายเธรดลองพร้อมกันก่อนที่เนื้อหาจะพร้อมใช้งานในหน่วยความจำ คุณช่วยอธิบายหน่อยได้ไหมว่าทำไมฉันถึงคิดว่ามันผิด
Vijayendra

คำตอบ:


9

หากเนื้อหานั้นเป็นแบบคงที่ข้อมูลนั้นจะถูกแคชในหน่วยความจำตามค่าเริ่มต้น (ยกเว้นว่าไม่มีหน่วยความจำเหลืออยู่) ไม่ใช่โดย nginx แต่เป็นระบบปฏิบัติการ - ทั้งหมดที่เหลืออยู่ด้านดิสก์จะเป็น stat ()

หากคุณต้องการโซลูชันหน่วยความจำ 100% คุณสามารถกำหนดค่า ramdisk และให้บริการข้อมูลได้จากที่นั่น


ใช่ฉันเข้าใจว่าเนื้อหาถูกแคชในหน่วยความจำโดยระบบปฏิบัติการ แต่ข้อสันนิษฐานคือไฟล์นั้นมีอยู่ในหน่วยความจำแล้ว ปัญหาอาจเกิดขึ้นพร้อมกัน มีหลายเธรดพยายามพร้อมกันก่อนที่เนื้อหาจะพร้อมใช้งานจากหน่วยความจำ คุณคิดอย่างไร?
Vijayendra

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

ตกลงฉันจะลอง ramdisk และดูว่ามันทำงานอย่างไร ขอบคุณสำหรับความคิดเห็น.
วิชัยนคร

9

เมื่อเซิร์ฟเวอร์อ่านไฟล์จากดิสก์มันจะถูกแคชไปที่ ram (และจะถูกแทนที่ด้วยไฟล์ที่แตกต่างกันถ้าคุณไม่มี ram) ปัญหาอยู่ที่การ จำกัด บัญชีของคุณคุณไม่สามารถเปิดไฟล์ได้มาก ( เรียกใช้ 'ulimit -a')

หากคุณต้องการเปลี่ยนขีด จำกัด นี้ - อ่านเกี่ยวกับ /etc/security/limits.conf


1
คุณถูกต้องขีด จำกัด การเปิดไฟล์เป็นปัญหาเนื่องจากขีด จำกัด คือ 256 ในระบบของฉัน แต่ฉันยังคงต้องคิดหาวิธีกำหนดค่า Nginx เพื่ออ่านไฟล์จากหน่วยความจำแทนดิสก์ ฉันไม่ต้องการเปลี่ยนการ จำกัด ไฟล์ที่เปิดอยู่และต้องการที่จะใช้แคชให้ได้ตามคำขอในภายหลัง
วิชัยนคร

4
"ฉันไม่ต้องการเปลี่ยนการ จำกัด ไฟล์ที่เปิด" - คุณทำผิด โอ้มากผิดมาก
womble

3
@ womble ฉันเข้าใจในการแก้ไขปัญหาทางออกที่ง่ายที่สุดคือการเปลี่ยนขีด จำกัด เหตุผลที่ฉันไม่ต้องการเปลี่ยนขีด จำกัด นี้คือดูว่าฉันสามารถทำอะไรกับการกำหนดค่าได้ดีที่สุดโดยไม่เปลี่ยนขีด จำกัด สิ่งที่ฉันสามารถปรับปรุงสิ่งต่าง ๆ โดยการเปลี่ยนแง่มุมอื่น ๆ ของแคชและการกำหนดค่า และโดยวิธีการที่คุณโปรดให้เหตุผล / ข้อเสนอแนะในขณะที่อ้างว่าทำไมใครบางคนผิด แม้ในความคิดเห็นแรกของคุณคุณทำสิ่งนี้โดยไม่ให้เหตุผลใด ๆ นี่คือสถานที่ที่จะให้คำแนะนำอย่างมืออาชีพโปรดหยุดปฏิบัติกับกำแพง Facebook ของคุณ
วิชัยนคร

7

ดังนั้นฉันรู้ว่านี่เก่าจริง ๆ แต่ที่นี่ไป

  1. Nginx ไม่ทำการแคชหน่วยความจำนอกกรอบคุณจะต้องการดู memcache สำหรับสิ่งนี้ฉันอยากจะแนะนำ openresty pack สำหรับสิ่งนี้: http://openresty.org/ สิ่งที่คุณทำได้นอกกรอบ (ตามที่ได้รับคำตอบข้างต้นคือแคชของหน้า)
  2. ข้อความแสดงข้อผิดพลาดนั้นฉันเกือบจะแน่ใจว่ามาจาก ab ไม่ใช่จากข้อผิดพลาดของ nginx, ข้อผิดพลาดของ nginx สำหรับข้อ จำกัด ของไฟล์ดูเหมือนว่า "ล้มเหลว (24: เปิดไฟล์มากเกินไป)" โปรดจำไว้ว่าในซ็อกเก็ตยูนิกซ์ก็เป็นไฟล์เช่นกันดังนั้นสำหรับผู้ใช้ที่คุณกำลังเรียกใช้ ab ในขณะนั้นจำเป็นต้องปรับ ulimit สำหรับเซสชันนั้นเพื่อเรียกใช้ ab เนื่องจากคุณบอกว่าขีด จำกัด ของคุณคือ 256 คุณจึงขอให้ ab ใช้การเชื่อมต่อ 500 ครั้งนี่เป็นการเพิ่มขีด จำกัด สูงสุดของคุณ

Ben Whitaker ถูกต้องปัญหามาจาก ab ซึ่งพยายามสร้างซ็อกเก็ต 500 ไฟล์ <=> (ใน linux os)
bachden

2

ไฟล์แคชใน RAM ยังคงเป็นไฟล์!

ลองใช้โมดูลแคช Memcached ของ Nginx แทน แต่ถึงกระนั้น 1,000 การเชื่อมต่อพร้อมกันมีขนาดใหญ่มากคุณคิดว่าเป็นกรณีของคุณหรือไม่

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