У меня возникли проблемы с приложением Erlang OTP + Cowboy, которое не позволяет мне одновременно открывать достаточно файлов.
Как изменить количество дескрипторов открытых файлов, разрешенных в BEAM?
Потенциально мне потребуется одновременно открыть около 500 небольших текстовых файлов, но, похоже, ограничение на количество файлов составляет 224. Я получил значение 224 из этой небольшой тестовой программы:
-module(test_fds).
-export([count/0]).
count() -> count(1, []).
count(N, Fds) ->
case file:open(integer_to_list(N), [write]) of
{ok, F} ->
count(N+1, [F| Fds]);
{error, Err} ->
[ file:close(F) || F <- Fds ],
delete(N-1),
{Err, N}
end.
delete(0) -> ok;
delete(N) ->
case file:delete(integer_to_list(N)) of
ok -> ok;
{error, _} -> meh
end,
delete(N-1).
Это дает
$ erl
Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [kernel-poll:false]
Eshell V9.2 (abort with ^G)
1> c(test_fds).
{ok,test_fds}
2> test_fds:count().
{emfile,224}
3>
Кажется, это проблема Erlang, а не проблема Mac OSX, поскольку из командной строки я получаю:
$ sysctl -h kern.maxfiles
kern.maxfiles: 49,152
$ sysctl -h kern.maxfilesperproc
kern.maxfilesperproc: 24,576
ulimit -n
в вашей оболочке? - person Dogbert   schedule 01.03.2018ulimit
возвращаетunlimited
, но это явно не так! - person Chris W   schedule 01.03.2018