สำนักวิทยบริการและเทคโนโลยีสารสนเทศ (สวส.)

Office of Academic Resources and Information Technology

การเพิ่มขีดจำกัดในการเปิด Socket Connection ใน Ubuntu

ผมได้พัฒนาระบบตัวหนึ่ง ซึ่งจะต้องรองรับการเปิด Socket จำนวนมาก แล้วก็เจอปัญหาว่า error: [Errno 24] Too many open files เนื่องจากระบบได้จำกัดจำนวนการเปิดไฟล์จำนวนมาก ซึ่งรวมไปถึงการเปิด Socket ด้วยครับ ดังตัวอย่างนี้ครับ
ERROR:tornado.application:Exception in I/O handler for fd 4
Traceback (most recent call last):
  File "/home/rmutsv/wpad/tornado/ioloop.py", line 672, in start
  File "/home/rmutsv/wpad/tornado/stack_context.py", line 331, in wrapped
  File "/home/rmutsv/wpad/tornado/stack_context.py", line 302, in wrapped
  File "/home/rmutsv/wpad/tornado/netutil.py", line 141, in accept_handler
  File "/usr/lib/python2.7/socket.py", line 202, in accept
error: [Errno 24] Too many open files

โดยเราสามารถไปเพิ่มขีดจำกัดในการเปิดไฟล์ให้เพิ่มขึ้นได้ดังนี้ครับ

1. ตรวจสอบการจำกัดในการเปิดไฟล์
เราสามารถตรวจสอบว่า ขณะนี้ระบบของเรา มีขีดจำกัดในการเปิดไฟล์ไว้เท่าไหร่ ดังคำสั่งต่อไปนี้ครับ
$ ulimit -n
1024

จะเห็นว่าจะมีขีดจำกัดเพียงแค่ 1024 เท่านั้น ทำให้ระบบของเราไม่สามารถรองรับงานในกรณีที่มีการเปิด socket จำนวนที่มากกว่า 1024 ได้ครับ

2. แก้ไขไฟล์ /etc/security/limits.conf
เมื่อเราต้องการเพิ่มขีดจำกัดในการเปิดไฟล์ให้มากขึ้น เพื่อให้ระบบของเรารองรับ socket connection จำนวนมาก ๆ ได้ เราสามารถทำได้โดยไปแก้ไขไฟล์ /etc/security/limits.conf ดังนี้ครับ

File : /etc/security/limits.conf
*               soft    nofile  50000
*               hard    nofile  50000
root            soft    nofile  50000
root            hard    nofile  50000

จะเห็นว่าเราจะทำการกำหนด limit ในการการเปิดไฟล์ไว้ที่ 50000 ในผู้ใช้ทั้งหมดและ root เนื่องจาก root ไม่ได้รวมใน * ด้วย จึงต้องกำหนดแยกมาอีกชุดนึงครับ จากนั้นก็ทำการ reboot ระบบใหม่ และใช้คำสั่ง ulimit -n ตรวจสอบดูอีกครั้งว่าได้มีการเพิ่มขีดจำกัดแล้ว ก็เป็นอันจบพิธีครับ