Empêcher les applications utilisateur de consommer toute la mémoire

Nous avons des serveurs de terminaux physiques sous Windows Server 2022, où les utilisateurs se connectent et exécutent des applications, y compris des calculs par éléments finis. Selon ce que font les utilisateurs, les applications peuvent consommer tout le processeur et la RAM, et Windows devient instable.

Le journal Système contient des erreurs comme :

Application popup: dwm.exe - System Error : The process has terminated
because it could not allocate additional memory.

Et des avertissements de mémoire insuffisante :

Windows successfully diagnosed a low virtual memory condition. The following programs consumed the most virtual memory: fl_mpi2320.exe (7256) consumed 8,306,704,384 bytes, fl_mpi2320.exe (6020) consumed 6,652,760,064 bytes, and fl_mpi2320.exe (11188) consumed 6,635,606,016 bytes.

C’est problématique car les processus système plantent. Les connexions Bureau à distance ne fonctionnent plus, et nous devons redémarrer les hôtes à distance pour récupérer.

J’ai cherché des solutions, mais je n’ai pas trouvé de moyen de garantir que les processus utilisateur ne puissent pas affecter le système de cette façon (ni paramètres système ni GPO). Augmenter le fichier d’échange pourrait repousser le problème un peu, mais ne le résoudra pas.

Ajouter de la RAM n’est pas une option. La mémoire est suffisante pour ce que les utilisateurs doivent faire, à quelques exceptions près, et il y aura toujours quelqu’un qui essaiera de calculer quelque chose de trop gros pour tenir en mémoire. L’éducation des utilisateurs serait la meilleure solution, mais elle ne fonctionne pas assez bien, car beaucoup de gens veulent simplement voir leurs résultats le plus rapidement possible.

Il est possible d’écrire un service Windows qui tue les processus utilisateur quand ils utilisent trop de mémoire, mais il pourrait être trop tard pour le système. Les tuer à distance ne ressuscite pas les machines quand la mémoire est épuisée.

Comment puis-je empêcher le système d’allouer trop de mémoire ?

Je ne pense pas que Windows dispose nativement de cette fonctionnalité (plus — il existait une fonctionnalité appelée Resource Manager, il semble qu’elle ait été obsolète après 2012).

Vous pourriez envisager de déployer des hôtes de virtualisation pour RemoteApp, plutôt que de permettre que l’OS hôte soit l’endroit où les applications sont exécutées. Cela limiterait au moins le domaine de défaillance à (probablement) uniquement l’utilisateur impacté.

Je sais que Citrix Virtual Apps permet d’être très granulaire avec les politiques de limitation de ressources ; il comble (et comble apparemment toujours) un certain nombre de lacunes dans la livraison native d’applications de l’OS.

Vous pourriez également vérifier auprès du fournisseur de votre logiciel d’éléments finis si l’application elle-même dispose d’un moyen de définir un plafond sur la quantité de mémoire qu’elle essaiera d’utiliser.