Il arrive que mon Mac se comporte bizarrement. Un symptôme typique est que je ne peux plus ouvrir certaines applications qui fonctionnaient très bien il y a peu. C'est ce qui vient de se produire et j'ai constaté que ce problème était dû à un excès de fichiers ouverts dans le système. Par exemple :
$ man lsof
sh: pipe error: Too many open files in system
Error executing formatting or display command.
System command (cd '/usr/share/man' && (echo ".ll 24.1i"; echo ".nr LL 24.1i"; /bin/cat '/usr/share/man/man8/lsof.8') | /usr/bin/tbl | /usr/bin/groff -Wall -mtty-char -Tascii -mandoc -c | (/usr/bin/less -is || true)) exited with status 33024.
Man page /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/share/man/man8/lsof.8 is identical to /usr/share/man/man8/lsof.8
No manual entry for lsof
En outre :
$ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
dlopen /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/76.0.3809.100/Helpers/Google Chrome Helper.app/Contents/MacOS/../../../../Google Chrome Framework: dlopen(/Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/76.0.3809.100/Helpers/Google Chrome Helper.app/Contents/MacOS/../../../../Google Chrome Framework, 261): no suitable image found. Did find:
/Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/76.0.3809.100/Helpers/Google Chrome Helper.app/Contents/MacOS/../../../../Google Chrome Framework: open() failed with errno=23
/Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/76.0.3809.100/Helpers/Google Chrome Helper.app/Contents/MacOS/../../../../Google Chrome Framework: stat() failed with errno=3
/Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/76.0.3809.100/Google Chrome Framework: open() failed with errno=23
[0822/142149.543101:ERROR:mac_util.cc(204)] _CFCopySystemVersionDictionary failed
[0822/142149.543447:WARNING:process_memory_mac.cc(93)] mach_vm_read(0x7ffee8237000, 0x2000): (os/kern) invalid address (1)
[92085:775:0822/112149.554485:FATAL:process_singleton_posix.cc(236)] : Too many open files in system (23)
[0822/142149.557563:ERROR:file_io_posix.cc(140)] open /Users/decio/Library/Application Support/Google/Chrome/Crashpad/settings.dat: Too many open files in system (23)
[0822/142149.557717:ERROR:file_io_posix.cc(148)] open /Users/decio/Library/Application Support/Google/Chrome/Crashpad/new/85472cbe-1c22-4598-94bf-a964bf67b0c5.dmp: Too many open files in system (23)
[0822/142149.558108:ERROR:mac_util.cc(204)] _CFCopySystemVersionDictionary failed
[0822/112149.558599:WARNING:process_memory_mac.cc(93)] mach_vm_read(0x7ffeef5d5000, 0x2000): (os/kern) invalid address (1)
[92089:775:0822/112149.643059:ERROR:resource_bundle.cc(803)] Failed to load /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/76.0.3809.100/Resources/chrome_100_percent.pak
Some features may not be available.
[92089:775:0822/112149.643114:ERROR:resource_bundle.cc(803)] Failed to load /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/76.0.3809.100/Resources/chrome_200_percent.pak
Some features may not be available.
[92089:775:0822/112149.643192:ERROR:resource_bundle.cc(363)] failed to load locale.pak
[92089:775:0822/112149.643221:ERROR:resource_bundle.cc(803)] Failed to load /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/76.0.3809.100/Resources/resources.pak
Some features may not be available.
[0822/112149.648315:ERROR:file_io_posix.cc(140)] open /Users/decio/Library/Application Support/Google/Chrome/Crashpad/settings.dat: Too many open files in system (23)
[0822/112149.648369:ERROR:file_io_posix.cc(148)] open /Users/decio/Library/Application Support/Google/Chrome/Crashpad/new/f3454bf7-4dc1-4a39-9b23-112edbf9565b.dmp: Too many open files in system (23)
[0822/112149.649774:ERROR:mac_util.cc(204)] _CFCopySystemVersionDictionary failed
[0822/112149.649989:WARNING:process_memory_mac.cc(93)] mach_vm_read(0x7ffee426c000, 0x2000): (os/kern) invalid address (1)
Trace/BPT trap: 5
[0822/112149.746121:WARNING:system_snapshot_mac.cc(42)] sysctlbyname kern.nx: No such file or directory (2)
J'ai redémarré quelques applications et j'ai réussi à repasser sous la limite et à exécuter de nouvelles applications.
Cependant, j'aimerais être plus systématique. Pour autant, les quelques applications que j'ai redémarrées étaient tout juste suffisantes pour passer sous la limite, et je serai bientôt confronté au même problème. Plutôt que de fermer des applications au hasard qui peuvent ou non contribuer à ce problème, j'aimerais localiser l'application spécifique qui accumule les poignées de fichiers et la fermer.
Je pensais que lsof
m'aiderait à identifier l'application problématique, mais l'analyse manuelle de sa sortie par défaut est irréalisable. Je pourrais écrire un shell script ou un programme Python pour regrouper les gestionnaires de fichiers par application, mais je pense qu'il pourrait y avoir un commutateur pour lsof
qui effectue ce regroupement automatiquement, ou peut-être une application similaire à Activity Monitor mais qui affiche le nombre de gestionnaires de fichiers ouverts par processus.
Ma question est donc la suivante : Comment puis-je afficher le nombre de handles de fichiers ouverts groupés par processus ?
Je travaille sous MacOS 10.14.5, si cela fait une différence. En outre, bien que je sache que je peux augmenter la limite des fichiers ouverts, je pense que le vrai problème est que l'une de mes applications fuit des ressources, un peu comme une fuite de mémoire, et qu'il est préférable pour les performances du système de redémarrer l'application concernée plutôt que d'augmenter aveuglément les limites et de permettre à l'application de continuer à accumuler des ressources.