Testy przekraczające limit plików w systemie operacyjnym

0

Cześć,

zwracam się z takim pytaniem: odpalam testy napisane do projektu który rozwijam - i wyskakuje taki oto błąd -

Caused by: java.nio.file.FileSystemException: (ścieżka do plików): Too many open files... 

itd. i przez to testy nie przechodzą.

Pracuję na Macu i myślałem że to może być problem domyślnie ustawionej maksymalnej ilości plików które mogą być otwierane. Modyfikowałem to limity następującymi komendami w terminalu :

sudo kern.maxfiles=20480   
sudo sysctl -w kern.maxfiles=20480
sudo sysctl -w kern.maxfilesperproc=18000
sudo launchctl limit maxfiles 65536 200000

i nic nie przyniosło skutku. W IntelliJ nie ma chyba jakiegoś ograniczenia na ilość plików używanych podczas testowania.

Czy ktoś może wie w czym może tkwić problem? Dodam, że na Windowsie wszystko śmiga, ale raczej nie będę go instalował na macbooka.

0

A jesteś pewien że problem nie jest "realny"? Tzn. może faktycznie otwierasz pliki bez ich zamykania? Czy wszędzie gdzie operujesz plikami korzystasz z try with resources?

0

@Shalom: Zastanawiałem się nad tym ale odszedłem od tej idei z następującego powodu. Skoro ten problem występuje "realnie" i jest on faktycznie bugiem w kodzie - to jakim cudem takiego kalibru problem nie powoduje żadnych problemów podczas testowania i ogólnie, podczas działania aplikacji na Windowsie?

Nie mam jeszcze jakiejś pro intuicji jak to działa więc moja amatorska podpowiedziała mi, że skoro ten problem jest na prawdę "realny" to i na innej platformie on powinien występować, a jednak nie widać tego oznak.

" Czy wszędzie gdzie operujesz plikami korzystasz z try with resources?" - jeszcze nie umiem na to odpowiedzieć, ale z tą wskazówką spędzę jutro czas do momentu aż to się rozwiąże. Każdą inną uwagę koncepcyjną, gdzie warto zajrzeć też przyjmę. :P

Dzięki za odpowiedź.

1
  1. Testy mogą wykonywać dużo więcej pewnych operacji niż "prawdziwy" system. Możecie mieć jakiś stress-test który celowo puszcza przez system tysiące plików chociażby. Może też być tak, że to setup testów jest walnięty i trzyma otwarte pliki, a nie sam testowany system. Np. w testach generujecie pliki z danymi testowymi, ale nie są nigdy zamykane i każdy kolejny test generuje ich więcej i więcej.
  2. Windows i Linux trochę inaczej operują na plikach - mają nie tylko inne limity na liczbę otwartych plików, ale w ogóle sposób dostępu jest bardzo różny. W Linuxie możesz np. usunąć plik który jest otwarty (ba, możesz nawet usunąć uruchomiony program!), podczas gdy Windows rzuci ci jakimś błędem że plik jest używany. W efekcie akurat w tym szczególnym przypadku uważałbym z zakładaniem że skoro coś działa na X to powinno działać na Y.
2

Mała rada - warto założyć pułapkę (debug) momencie wystąpienia problemu i sprawdzić jakie to pliki są otwarte.
(np. komendą lsof + grepowanie po procesie/nazwach).

0

Nie wiem jaka to na macach, ale na uniksach limit systemowy może być górnym ograniczeniem, zaś na poziomie powłoki limit może być zupełnie inny (< system).
Jest na macach ulimit -n ?

0

Zwykle oprócz otwierania plików warto również je zamykać :) dodatkowo, może to być limit deskryptorów ogólnie, a wiec wliczają się również sockety, jeśli jakieś otwierasz.

1

Na 99% nie zamykasz plików w testach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1