Non usage de la mémoire virtuelle
Fermé
lucjs
Messages postés
37
Date d'inscription
jeudi 8 octobre 2009
Statut
Membre
Dernière intervention
15 mars 2023
-
27 sept. 2019 à 13:37
[Dal] Messages postés 6057 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 17 mars 2023 - 28 sept. 2019 à 16:09
[Dal] Messages postés 6057 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 17 mars 2023 - 28 sept. 2019 à 16:09
A voir également:
- Non usage de la mémoire virtuelle
- Mémoire virtuelle windows 10 - Guide
- Controleur de mémoire pci ✓ - Forum Matériel informatique
- L'état de la memoire ne peut pas etre read - Astuces et Solutions
- Nettoyer mémoire ipad - Guide
- Exemple de thème de mémoire en secrétariat - Forum Messagerie
4 réponses
[Dal]
Messages postés
6057
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mars 2023
1 043
Modifié le 27 sept. 2019 à 15:10
Modifié le 27 sept. 2019 à 15:10
Salut lucjs,
Les API de ton système d'exploitation peuvent te permettre d'inspecter l'état de la mémoire de la machine, ce qui peut permettre à ton application de décider de sa stratégie d'usage de la mémoire.
Par exemple, sous Windows, l'API Win32 te permet d'utiliser la fonction
https://docs.microsoft.com/fr-fr/windows/win32/api/sysinfoapi/nf-sysinfoapi-globalmemorystatusex
Cette documentation comprend aussi un exemple de code.
Il y a aussi
https://docs.microsoft.com/fr-fr/windows/win32/api/psapi/nf-psapi-getperformanceinfo
Dal
Les API de ton système d'exploitation peuvent te permettre d'inspecter l'état de la mémoire de la machine, ce qui peut permettre à ton application de décider de sa stratégie d'usage de la mémoire.
Par exemple, sous Windows, l'API Win32 te permet d'utiliser la fonction
GlobalMemoryStatusEx(), pour obtenir des informations sur la quantité de mémoire physique et son occupation, la quantité de mémoire virtuelle et son occupation (et la consommation d'espace dans le fichier de swap pagefile.sys), permettant d'obtenir des informations à un moment T sur les disponibilités mémoire de la machine pour ton application.
https://docs.microsoft.com/fr-fr/windows/win32/api/sysinfoapi/nf-sysinfoapi-globalmemorystatusex
Cette documentation comprend aussi un exemple de code.
Il y a aussi
GetPerformanceInfo()qui permet d'obtenir des informations additionnelles au delà des ressources mémoire disponibles à ton application.
https://docs.microsoft.com/fr-fr/windows/win32/api/psapi/nf-psapi-getperformanceinfo
Dal
lucjs
Messages postés
37
Date d'inscription
jeudi 8 octobre 2009
Statut
Membre
Dernière intervention
15 mars 2023
9
27 sept. 2019 à 17:44
27 sept. 2019 à 17:44
Merci beaucoup pour l'information; je ne programme pas moi-même mais une application que j'utilise (Albelli, album photos) donne un message "out of memory" (message de l'application, pas du système d'exploitation); ils prétendent que ma mémoire de travail (4 GB, ils demandent minimum 2GB) est insuffisante, je pense moi que c'est leur programme qui gère mal la mémoire virtuelle.
J'ai essayé de "saturer" le PC en lançant un tas d'applications et en ouvrant un tas de fenêtres, il finit par ramer, logique, mais ne donne aucune erreur.
Au moment du "out of memory", la mémoire de travail est occupée vers 80% (dont +-1Gb pour albelli) mais je dispose largement de mémoire virtuelle.
Qu'en pensez-vous?
J'ai essayé de "saturer" le PC en lançant un tas d'applications et en ouvrant un tas de fenêtres, il finit par ramer, logique, mais ne donne aucune erreur.
Au moment du "out of memory", la mémoire de travail est occupée vers 80% (dont +-1Gb pour albelli) mais je dispose largement de mémoire virtuelle.
Qu'en pensez-vous?
NHenry
Messages postés
15047
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 mars 2023
331
27 sept. 2019 à 18:20
27 sept. 2019 à 18:20
Le mémoire virtuelle est gérée par l'OS, les applications ne sont pas sensées la manipuler, c''est transparent pour elles.
Rapproches-toi plus du fournisseur alors, car ici on s'occupe de programmation pas d'assistance informatique.
Rapproches-toi plus du fournisseur alors, car ici on s'occupe de programmation pas d'assistance informatique.
lucjs
Messages postés
37
Date d'inscription
jeudi 8 octobre 2009
Statut
Membre
Dernière intervention
15 mars 2023
9
27 sept. 2019 à 19:00
27 sept. 2019 à 19:00
Merci, mais dans ce cas, il s'agit bien de programmation, mais pas la mienne ! La seule manière de savoir si le fournisseur me raconte des bobards (ce que je pense) est de savoir s'il est possible d'empêcher le travail normal de swapping par programmation: logiquement, le PC doit ralentir et même quasiment se bloquer si l'on a une charge d'échange extrême, mais qu'une application donne un "out of memory" (alors que c'est censé être transparent, comme vous le dites) me semble un bug...
[Dal]
Messages postés
6057
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
17 mars 2023
1 043
Modifié le 28 sept. 2019 à 16:11
Modifié le 28 sept. 2019 à 16:11
Salut lucjs,
Plutôt que de lancer des applications dans tous les sens pour charger la mémoire de ta machine et tester les conditions dans lesquelles ton logiciel renvoie une erreur d'allocation de mémoire, tu peux utiliser les "job objects" de l'API Windows pour que Windows limite la quantité de mémoire que ton logiciel peut allouer.
Je t'ai expliqué comment le faire si tu sais programmer.
Si tu ne sais pas programmer, tu as un outil de ligne de commande open source sous licence MIT (lbre et gratuit) qui s'appelle "process-governor" et qui permet de d'attacher des "job objects" à des processus.
https://github.com/lowleveldesign/process-governor (sources en C# et instructions d'usage)
https://lowleveldesign.org/2013/11/21/set-process-memory-limit-with-process-governor/ (site du concepteur avec instructions et explications)
https://github.com/lowleveldesign/process-governor/releases (binaire exécutable dans le .zip)
En réduisant la quantité de mémoire disponible au programme que tu veux tester, tu rencontreras plus rapidement l'erreur en question, et cela pourra te faciliter la recherche des conditions à réunir pour que l'erreur d'allocation mémoire se manifeste. Lorsque tu sauras reproduire le problème, tu pourras fournir à l'éditeur du logiciel des informations utiles au diagnostic d'une éventuelle erreur (si ce que tu vois est effectivement un bogue).
Sinon, si tu veux juste pouvoir maximiser tes chances de ne pas rencontrer cette erreur, je te conseille au contraire de ne pas utiliser "process-governor", de fermer toutes autres applications et services non utilisés et consommateurs de mémoire, et d'augmenter la taille de ton fichier de swap pagefile.sys.
Dal
Plutôt que de lancer des applications dans tous les sens pour charger la mémoire de ta machine et tester les conditions dans lesquelles ton logiciel renvoie une erreur d'allocation de mémoire, tu peux utiliser les "job objects" de l'API Windows pour que Windows limite la quantité de mémoire que ton logiciel peut allouer.
Je t'ai expliqué comment le faire si tu sais programmer.
Si tu ne sais pas programmer, tu as un outil de ligne de commande open source sous licence MIT (lbre et gratuit) qui s'appelle "process-governor" et qui permet de d'attacher des "job objects" à des processus.
https://github.com/lowleveldesign/process-governor (sources en C# et instructions d'usage)
https://lowleveldesign.org/2013/11/21/set-process-memory-limit-with-process-governor/ (site du concepteur avec instructions et explications)
https://github.com/lowleveldesign/process-governor/releases (binaire exécutable dans le .zip)
En réduisant la quantité de mémoire disponible au programme que tu veux tester, tu rencontreras plus rapidement l'erreur en question, et cela pourra te faciliter la recherche des conditions à réunir pour que l'erreur d'allocation mémoire se manifeste. Lorsque tu sauras reproduire le problème, tu pourras fournir à l'éditeur du logiciel des informations utiles au diagnostic d'une éventuelle erreur (si ce que tu vois est effectivement un bogue).
Sinon, si tu veux juste pouvoir maximiser tes chances de ne pas rencontrer cette erreur, je te conseille au contraire de ne pas utiliser "process-governor", de fermer toutes autres applications et services non utilisés et consommateurs de mémoire, et d'augmenter la taille de ton fichier de swap pagefile.sys.
Dal
Modifié le 27 sept. 2019 à 15:29
Tu crées un "job object" à partir d'un programme et tu définis à partir de celui-ci les limites de mémoire (et d'autres types de limites) qui s'imposeront aux processus auxquels tu rattaches le "job object" avec .
https://docs.microsoft.com/fr-fr/windows/win32/api/jobapi2/nf-jobapi2-setinformationjobobject
Cela te permet de déléguer au système d'exploitation la gestion des limites que tu fixes.
Tu as un article synthétisant l'information sur la question, avec une partie parlant aussi de la possibilité de gérer des notifications lorsque les limites imposées sont excédées.
https://docs.microsoft.com/fr-fr/windows/win32/procthread/job-objects#job-limits-and-notifications