Article ID: 115287, created on Dec 12, 2014, last review on Dec 12, 2014

  • Applies to:
  • Plesk for Linux/Unix

Symptômes

Remarque : cet article s'applique uniquement aux environnements basés sur Parallels Containers.

Il y a de nombreuses erreurs relatives à des exceptions de mémoire insuffisante provenant du système et répertoriées dans le fichier "/var/log/sw-cp-server/error_log". Par exemple :

  (mod_fastcgi.c.2746) FastCGI-stderr: PHP Warning: proc_open() [<a href='function.proc-open'>function.proc-open</a>]: fork failed - Cannot allocate memory; File: /opt/psa/admin/plib/common_func.php3, Line: 1318

   Traceback (most recent call last):
  File "/opt/psa/admin/sbin/pmmcli", line 6, in <module>
pmmcli.main()
  File "/opt/psa/admin/share/pmmcli/pmmcli.py", line 2308, in main
_logger.critical("Runtime error in pmmcli: \n" + str(e.__class__) + " " + str(e) + "\n" +  stacktrace.stacktrace())
  File "/opt/psa/admin/lib/python/stacktrace.py", line 6, in stacktrace
traceback.print_exc(file = trace)
  File "/usr/lib/python2.6/traceback.py", line 227, in print_exc
print_exception(etype, value, tb, limit, file)
  File "/usr/lib/python2.6/traceback.py", line 125, in print_exception
print_tb(tb, limit, file)
  File "/usr/lib/python2.6/traceback.py", line 67, in print_tb
'  File "%s", line %d, in %s' % (filename,lineno,name))
  File "/usr/lib/python2.6/traceback.py", line 13, in _print
file.write(str+terminator)
MemoryError: out of memory

Autres erreurs possibles :

 # /usr/local/psa/bootstrapper/pp11.5.30-bootstrapper/bootstrapper.sh repair

 date: write error: Cannot allocate memory /usr/local/psa/bootstrapper/pp11.5.30-bootstrapper/bootstrapper.sh: fork: Cannot allocate memory

Ou :

# /usr/local/psa/admin/bin/nginxmng -s 
PHP Warning: proc_open(): fork failed - Cannot allocate memory; File: /usr/local/psa/admin/plib/common_func.php3, Line: 560


/usr/local/psa/admin/bin/send-error-report: error while loading shared libraries: /lib64/libpthread.so.0: cannot apply additional memory protection after relocation: Cannot allocate memory

Cause

La limite privvmpages a probablement été atteinte sur ce conteneur. Ceci est indiqué par la valeur non nulle de la colonne "failcnt" :

awk '$NF > 0' /proc/user_beancounters

Version: 2.5
    uid resource           held          maxheld       barrier         limit      failcnt
        privvmpages        1954900       5089134       3500000       4000000        93324

Dans l'exemple ci-dessus, la limite est définie sur 4 millions de pages, soit l'équivalent de 16G et la limite est définie sur 13G. D'après la valeur "maxheld", l'utilisation de la mémoire maximale sur le conteneur était de 19,5G. C'est pourquoi le hardware node a détruit certains processus, d'où le comportement inattendu.

Remarque : ce problème n'est peut-être pas seulement dû aux processus gourmands en mémoire dans le conteneur, mais à une configuration incorrecte de la limite de la mémoire sur le hardware node.

D'autres ressources du conteneur peuvent également être dépassées. Par exemple : kmemsize et numproc.

# egrep 'kmemsize|numproc' /proc/user_beancounters 
72030666: kmemsize 21389702 21893120 20971520 23068672 189 
numproc 86 87 96 96 9 

Résolution

  1. Vérifiez si les limites du conteneur (/proc/user_beancounters) ont été atteintes.

  2. Vérifiez si la configuration de la mémoire générale des conteneurs sur le hardware node est valide (la somme des limites de mémoire de tous les conteneurs doit être inférieure au volume total de mémoire disponible sur le hardware node).
  3. Essayez d'augmenter les ressources pour le conteneur. Par exemple :

    # vzctl set xxxxx --kmemsize 110000:120000 --save 
    UBC limits were set successfully 
    Saved parameters for Container xxxxx where xxxxx is a container ID on particular hardware node
    

56797cefb1efc9130f7c48a7d1db0f0c a914db3fdc7a53ddcfd1b2db8f5a1b9c 29d1e90fd304f01e6420fbe60f66f838

Email subscription for changes to this article
Save as PDF