ไม่สามารถเปิดสตรีมไฟล์ที่เปิดมากเกินไป - ขีด จำกัด สูงสุดที่ 1024 - สีแดง - ทำไมขีด จำกัด ใหม่ไม่ทำงาน


3

ฉันได้รับข้อความนี้ขณะทำการดีบักปัญหาในโปรแกรม PHP

  • ฉันได้แก้ไข /etc/security/limits.conf แล้วและเพิ่ม
* ยากที่จะ 5,500,000
* นุ่มนวล 500,000000
รูตฮาร์ด nofile 500000
รูตอ่อนนุ่ม 500000

ตามคำแนะนำที่นี่ ( https://rtcamp.com/tutorials/linux/increase-open-files-limit/ ) หลังจากนั้นให้พิมพ์

ulimit -Hn

และ

ulimit -Sn

เผยขีด จำกัด ใหม่ 500,000

  • ฉันได้แก้ไขไฟล์/etc/pam.d/common-sessionแล้วและเพิ่มบรรทัด
เซสชั่นที่จำเป็น pam_limits.so
  • ฉันรีบูตระบบแล้ว โปรแกรมของฉันยังคงโยนข้อยกเว้นเมื่อพยายามเปิดไฟล์ # 1025

  • ฉันได้รับกระบวนการ php PID (27263) จากนั้นก็ทำการ cat / proc / 27263 / limit

Limit Soft Limit ฮาร์ดไดรฟ์ จำกัด
เวลา cpu สูงสุดไม่ จำกัด ไม่ จำกัด วินาที
ขนาดไฟล์สูงสุดไม่ จำกัด จำนวนไม่ จำกัด ไบต์
ขนาดข้อมูลสูงสุดไม่ จำกัด จำนวนไม่ จำกัด ไบต์
ขนาดสแต็กสูงสุด 10485760 ไม่ จำกัด ไบต์
ขนาดไฟล์หลักสูงสุด 0 ไบต์ไม่ จำกัด
Max resident ตั้งค่าไม่ จำกัด ไบต์ไม่ จำกัด
กระบวนการสูงสุด 95124 95124 กระบวนการ
Max open files 1024 4096 ไฟล์
หน่วยความจำสูงสุดถูกล็อค 65536 65536 ไบต์
พื้นที่ที่อยู่สูงสุดไม่ จำกัด ไม่ จำกัด ไบต์
ล็อคไฟล์สูงสุดไม่ จำกัด ล็อคไม่ จำกัด
สัญญาณสูงสุดที่รอดำเนินการ 95124 95124 สัญญาณ
ขนาด msgqueue สูงสุด 819200 819200 ไบต์
ลำดับความสำคัญสูงสุดที่ดีที่สุด 0 0
ลำดับความสำคัญสูงสุดตามเวลาจริง 0 0
Max realtime timeout ไม่ จำกัด จำนวนไม่ จำกัด เรา

อย่างที่คุณเห็นแม้หลังจากตั้งค่าการกำหนดค่าทั้งระบบกระบวนการ PHP ยังคงมีขีด จำกัด การเปิดไฟล์สูงสุดที่ 1024

ทำไม?? ฉันจะเปลี่ยนสิ่งนั้นได้อย่างไร เหตุใดการตั้งค่าทั้งระบบจึงไม่ทำงานสำหรับกรณีนี้

ขอขอบคุณ

คำตอบ:


3

คำตอบสั้น ๆ (สำหรับวงเงิน 500000)

  1. แก้ไข /etc/security/limits.conf และเพิ่มลงในส่วนท้ายของไฟล์:
* ยากที่จะ 5,500,000
* นุ่มนวล 500,000000
รูตฮาร์ด nofile 500000
รูตอ่อนนุ่ม 500000
  1. แก้ไขไฟล์ / etc / sysconfig / httpd และเพิ่มที่ส่วนท้ายเพิ่ม:
ulimit -n 500000
  1. รีบูท (ไม่รู้ว่าจำเป็นหรือไม่)

  2. บิงโก!

คำตอบที่ยาว

ปรากฎว่าตามที่ulimits ทำงานกับ start-stop-daemonและการสนทนารายชื่อผู้รับจดหมาย Red Hatนี้

limit.conf (5) เป็นการกำหนดค่าสำหรับ pam_limits (8) ซึ่งถูกเปิดใช้งานโดย PAM stack ตามการกำหนดค่าใน /etc/pam.d อย่างไรก็ตาม start-stop-daemon (8) ตามที่เรียกใช้จากสคริปต์ init.d จะไม่ผ่าน PAM stack ดังนั้นการตั้งค่าเหล่านี้จะไม่ถูกนำไปใช้

หรือในแง่ง่าย

/etc/security/limits.conf ใช้กับการเข้าสู่ระบบและผู้ใช้ "apache" ไม่ได้เข้าสู่ระบบ

วิธีแก้ปัญหาที่เสนอในลิงค์แรกคือการแก้ไขสคริปต์ init.d และเพิ่ม ulimit -n ที่ส่วนท้ายของสคริปต์

อย่างไรก็ตามตามที่สามารถสังเกตได้ในลิงค์ที่สองหากคุณแก้ไขสคริปต์ /etc/init.d/httpd การอัปเดตระบบสามารถเขียนทับไฟล์และการเปลี่ยนแปลงจะหายไป

เพื่อที่ว่าทำไมพวกเขาแนะนำที่นี่ , ที่นี่และที่นี่เพื่อแก้ไข etc / sysconfig / httpd / ไฟล์แทนและป้อนคำสั่งมี

นั่นคือสิ่งที่ฉันทำและตอนนี้ฉันมีแมว / proc / pid / จำกัด ที่สวยงามอย่างที่ฉันต้องการ:

Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            10485760             unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             500000               500000               processes
Max open files            500000               500000               files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       95124                95124                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

และโปรแกรมจะไม่ล่มอีกต่อไป

โดยวิธีการที่ระบบเป็นเซิร์ฟเวอร์ RHEL 6.6

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