setrlimit(2) の「32 ビットプラットフォームにおける「大きな」リソース上限値の表現」箇所を参照すると、少なくとも、32 bit 環境でも 2^32-1 まで設定できるようですので、65535, 65536 が上限というわけではなく、単に、2のべき乗、2のべき乗-1 を設定しているだけだと思います。
ちなみに、64 bit 環境では 2^64-1 = unlimited となるようです。
# ulimit -u 18446744073709551614 (=2^64-2)
# ulimit -u
18446744073709551614
# ulimit -u 18446744073709551615 (=2^64-1)
# ulimit -u
unlimited
ただし、open files (ulimit -n)については、kernel パラメータの fs.nr_open までしか上げることができません。
# sysctl fs.nr_open
fs.nr_open = 1048576 (現在の値)
# ulimit -n 1048576 (ここまではOK)
# ulimit -n 1048577
-bash: ulimit: open files: cannot modify limit: 許可されていない操作です
# sysctl -w fs.nr_open=2147483584 (=2^31-64 : 手元の環境ではここまで)
fs.nr_open = 2147483584
# ulimit -n 2147483584 (ここまでOK)
fs.nr_open の上限 : 2147483584 についてはわかりませんでした。
また、ulimit -n (プロセスのファイルディスクリプタの上限)を上げるのならば、fs.file-max (OS 全体のファイルディスクリプタの上限)もそれ以上に上げる必要があります。
2015/09/28 00:36