Monday, January 29, 2007

Too many open files

Pernah menjalankan program java dan mendapatkan error "Too many open files" seperti dibawah ini?


java.io.IOException: Too many open files
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:145)
...

atau

java.net.SocketException: Too many open files
at com.sun.xml.rpc.client.http.HttpClientTransport.invoke(HttpClientTransport.java:140)
at com.sun.xml.rpc.client.StreamingSender._send(StreamingSender.java:96)


Mudahnya, hal tersebut terjadi karena program java ataupun sistem operasi mencapai batas jumlah soket atau file yang dapat dibukan pada saat bersamaan (concurrent).

Yang perlu dilakukan ketika mendapatkan error tersebut adalah, pastikan program yang anda buat selalu menutup file atau socket setelah tidak digunakan. Yang kedua, tambah maximum jumlah socket atau file yang bisa dibuka bersamaan pada sistem operasi yang anda gunakan.

Untuk Linux anda bisa check jumlah socket atau file yang dibuka bersamaan dengan program atau command lsof, misalnya untuk mengecek jumlah socket yang sedang dibuka berikan perintah 'lsof -i. Maximum jumlah socket atau file yang bisa dibuka secara bersamaan dapat dilihat dengan perintah 'ulimit -a'

Untuk mengubah setting maximum jumlah file tersebut, anda bisa mengedit file /etc/security/limits.conf atau dengan perintah berikut:

ulimit -n 2048

echo 2048 > /proc/sys/fs/file-max
echo 16384 > /proc/sys/fs/inode-max

Lebih jelas mengenai masalah ini, bisa dibaca di artikel "Resolve to many open files."

No comments:

Followers