Pour autant que je sache, la réponse fait partie de la longue histoire de l'informatique.
MacOS est basé sur Darwin, qui est le noyau du système d'exploitation d'Apple, et qui lui-même est basé sur xnu, qui est un hybride de FreeBSD superposé à Mach, qui sont basés sur... jusqu'à ce que vous remontiez vraiment loin, jusqu'à, je ne sais pas, Ada Lovelace ? Croyez-le ou non, c'est une simplification excessive de l'histoire de MacOS, mais cela couvre les points nécessaires pour comprendre ce qui suit.
A l'époque où FreeBSD était développé, la mémoire était chère, il y avait donc une forte incitation à en utiliser le moins possible, mais pas au point de ne pas pouvoir construire un système partagé par un département universitaire. L'idée était d'avoir un ordinateur qui pouvait être utilisé par de nombreuses personnes à la fois, et même si la mémoire était chère, les utilisateurs ne consommaient qu'une partie de la mémoire et de l'espace disque, plutôt qu'un ordinateur entier, donc vous vouliez être capable de servir autant de personnes que possible sans compromettre l'ensemble du système.
Le noyau dispose d'une section de mémoire réservée pour contenir les informations relatives à chaque processus, et la taille de cette table est ce qui limite le nombre total de processus que le système peut exécuter en même temps. Vous souhaitez donc que cette table soit aussi petite que possible, mais en même temps assez grande pour exécuter suffisamment de processus pour servir tous vos utilisateurs. D'autres réservations de mémoire du noyau, comme le nombre de tampons alloués pour stocker temporairement le trafic réseau, devaient également évoluer avec le nombre d'utilisateurs simultanés, c'est pourquoi FreeBSD a introduit un paramètre de réglage appelé MAXUSERS
Il s'agit plutôt d'un paramètre d'ajustement que vous définissez pour indiquer le nombre maximal d'utilisateurs que vous avez l'intention de gérer à un moment donné. Il ajustait l'équilibre entre la mémoire allouée au noyau et la mémoire disponible pour les utilisateurs.
Avant les interfaces graphiques, les utilisateurs individuels sur un système Unix exécutaient généralement très peu de processus. Ils exécutaient un shell de terminal, qui pouvait exécuter un éditeur, un programme de messagerie, un compilateur et d'autres programmes, chacun d'entre eux étant un processus. Le programme de courrier électronique et le compilateur exécutaient d'autres processus. À un moment donné, quelqu'un a estimé qu'un utilisateur n'aurait probablement pas besoin d'exécuter plus de 16 processus à la fois.
Quelqu'un (probablement la même personne) a estimé que le système lui-même pouvait être limité en toute sécurité à environ 20 processus.
Cela a permis de mettre à l'échelle la taille de la table de processus en fonction du nombre d'utilisateurs simultanés que le système devait prendre en charge :
#define NPROC (20 + 16 * MAXUSERS)
Au moment où Apple a incorporé xnu dans son système (et vraisemblablement au moment où xnu a bifurqué de FreeBSD) MAXUSERS
par défaut à 32. Avec 32 utilisateurs, NPROC était de 532. Et donc c'était dans OS X 10.0 . 532 était la limite du nombre total de processus pour l'ensemble du système. Les utilisateurs individuels étaient limités à la moitié de ce nombre : 266.
Il en a été ainsi jusqu'à OS X 10.7 Lion, date à laquelle Apple a ajouté un facteur d'échelle. (En fait, il avait un facteur d'échelle bien avant Lion pour Mode performance du serveur mais avec Lion, ils l'ont un peu étendu au mode normal). Si votre ordinateur est équipé de Lion ou d'une version ultérieure et dispose de 3 Go ou plus de mémoire, alors maxproc
est doublé, et maxprocperuid
qui est une fraction de maxproc
augmente encore plus. maxproc
passe de 532 à 1064 et maxprocperuid
va de 266 ( maxproc / 2
) à 709 ( (maxproc * 2) / 3
).
Vous obtenez ainsi les limites de 2010 (de 10.7 Lion à 10.14 Mojave) de 709 processus par utilisateur et de 1064 processus pour l'ensemble du système.
Dans 10.10 Yosemite, NPROC
est passé de (20 + 16 * MAXUSERS)
a (20 + 16 * 32)
probablement pour qu'ils puissent se débarrasser MAXUSERS
tout en gardant NPROC
inchangé. Dans 10.15 Catlina, NPROC
a été soulevée pour la première fois, mais curieusement ils ont gardé le "20 +" et l'ont rendu (20 + 32 * 32)
Donc, en commençant par Catalina maxproc
est un multiple de 1044.
Pourquoi un multiple, vous demandez-vous ? À partir de la version 10.13 High Sierra, maxproc
continue de s'étendre au fur et à mesure que vous ajoutez de la mémoire. Il double si vous avez 3 Go mais moins de 12 Go de mémoire, et au-delà, il multiplie par la taille de la mémoire divisée par 4 Go jusqu'à ce que vous atteigniez une limite, le facteur d'échelle de 16, lorsque vous avez 64 Go ou plus de mémoire installée.
Maintenant vous savez pourquoi maxproc
est un multiple de 532 ou 1044 plutôt que 512 ou 500, ce qui est plus courant.
Si vous voulez augmenter davantage vos limites, vous devez passer en mode serveur. Vous trouverez plus d'informations sur la façon de procéder et les raisons de le faire à l'adresse suivante Correction de "fork : resource temporarily unavailable" sur OS X . Vous pouvez lire beaucoup de détails sur ce que le mode serveur vous apporte réellement à l'adresse suivante Que fait réellement serverperfmode=1 sous MacOS ?