IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Calcul miniatures GD2 : serveur écroulé


Sujet :

Administration système

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut Calcul miniatures GD2 : serveur écroulé
    Bonjour,

    je partage des images avec des membres de ma famille dans un dossier placé sur mon serveur (Debian Etch à jour). J'utilise un explorateur de dossier afin d'afficher les miniatures (calculées dynamiquement).

    Hier soir, j'envoie une cinquantaine de photos jpeg sur le serveur, toutes entre 3 et 9 Mo (oui, c'est un peu gros, je n'ai pas fait attention). A 22h25 environ, mon serveur ne répond plus du tout : timeout sur tous les services (http, ftp, ssh, webmin...).

    Ce matin, tout revient à la normale mais je constate que le logcheck de 23 heures n'a pas été envoyé (je monitore le serveur par mail).

    Dans celui de 0h09, voici ce que je trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Warning: If you are seeing this message, your log files may not have been
    checked!
     
    Details:
    Failed to get lockfile: /var/lock/logcheck/logcheck.lock
     
     
    Also verify that the logcheck user can read all files referenced in
    /etc/logcheck/logcheck.logfiles!
     
    declare -x HOME="/var/lib/logcheck"
    declare -x LANG="fr_FR.UTF-8"
    declare -x LOGNAME="logcheck"
    declare -x MAILTO="root"
    declare -x OLDPWD
    declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
    declare -x PWD="/var/lib/logcheck"
    declare -x SHELL="/bin/sh"
    declare -x SHLVL="2"
    A 0h10, un rapport me parvient, et voici ce que je trouve au milieu de l'activité habituelle (je précise qu'il s'agit de la période 22h, mais je ne parviens pas, depuis très longtemps, à corriger le décalage d'une heures dans certains logs comme apache, syslog...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Aug 17 23:30:36 monserveur kernel:  [<c01459bc>] __alloc_pages+0x1f5/0x275
    Aug 17 23:30:50 monserveur kernel:  [<c0146b6b>] __do_page_cache_readahead+0xc8/0x1e8
    Aug 17 23:30:54 monserveur CRON[23135]: (pam_unix) session closed for user www-data
    Aug 17 23:31:06 monserveur kernel:  [<c027f874>] io_schedule+0x26/0x30
    Aug 17 23:31:11 monserveur kernel:  [<c027fa90>] __wait_on_bit_lock+0x4b/0x52
    Aug 17 23:31:30 monserveur kernel:  [<c0141754>] __lock_page+0x51/0x57
    Aug 17 23:31:43 monserveur kernel:  [<c0143c64>] filemap_nopage+0x15b/0x313
    Aug 17 23:31:50 monserveur kernel:  [<c014c128>] __handle_mm_fault+0x26e/0x740
    Aug 17 23:31:51 monserveur kernel:  [<c01154b6>] do_page_fault+0x18a/0x481
    Aug 17 23:31:51 monserveur kernel:  [<c011532c>] do_page_fault+0x0/0x481
    Aug 17 23:31:51 monserveur kernel:  [<c01037f9>] error_code+0x39/0x40
    Aug 17 23:31:51 monserveur kernel: Mem-info:
    Aug 17 23:31:51 monserveur kernel: DMA per-cpu:
    Aug 17 23:31:51 monserveur kernel: cpu 0 hot: high 0, batch 1 used:0
    Aug 17 23:31:51 monserveur kernel: cpu 0 cold: high 0, batch 1 used:0
    Aug 17 23:31:51 monserveur kernel: DMA32 per-cpu: empty
    Aug 17 23:31:51 monserveur kernel: Normal per-cpu:
    Aug 17 23:31:51 monserveur /USR/SBIN/CRON[23265]: (root) CMD (if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi)
    Aug 17 23:31:51 monserveur kernel: cpu 0 hot: high 90, batch 15 used:51
    Aug 17 23:31:51 monserveur kernel: cpu 0 cold: high 30, batch 7 used:11
    Aug 17 23:31:51 monserveur kernel: HighMem per-cpu: empty
    Aug 17 23:31:51 monserveur kernel: Free pages:        3692kB (0kB HighMem)
    Aug 17 23:31:51 monserveur kernel: Active:41130 inactive:33567 dirty:0 writeback:0 unstable:0 free:923 slab:2460 mapped:64 pagetables:828
    Aug 17 23:31:51 monserveur kernel: DMA free:1348kB min:112kB low:140kB high:168kB active:5988kB inactive:5664kB present:16384kB pages_scanned:609 all_unreclaimable? no
    Aug 17 23:31:51 monserveur kernel: lowmem_reserve[]: 0 0 302 302
    Aug 17 23:31:51 monserveur kernel: DMA32 free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
    Aug 17 23:31:51 monserveur kernel: lowmem_reserve[]: 0 0 302 302
    Aug 17 23:31:51 monserveur kernel: Normal free:2344kB min:2168kB low:2708kB high:3252kB active:158532kB inactive:128604kB present:310144kB pages_scanned:1568 all_unreclaimable? no
    Aug 17 23:31:51 monserveur kernel: lowmem_reserve[]: 0 0 0 0
    Aug 17 23:31:51 monserveur kernel: HighMem free:0kB min:128kB low:128kB high:128kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no
    Aug 17 23:31:51 monserveur kernel: lowmem_reserve[]: 0 0 0 0
    Aug 17 23:31:51 monserveur kernel: DMA: 5*4kB 2*8kB 0*16kB 1*32kB 0*64kB 0*128kB 1*256kB 0*512kB 1*1024kB 0*2048kB 0*4096kB = 1348kB
    Aug 17 23:31:51 monserveur kernel: DMA32: empty
    Aug 17 23:31:51 monserveur kernel: Normal: 40*4kB 13*8kB 0*16kB 1*32kB 0*64kB 2*128kB 1*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 2344kB
    Aug 17 23:31:51 monserveur kernel: HighMem: empty
    Aug 17 23:31:51 monserveur kernel: Swap cache: add 1659821, delete 1659807, find 590899/741633, race 0+1299
    Aug 17 23:31:51 monserveur kernel: Free swap  = 0kB
    Aug 17 23:31:51 monserveur kernel: Total swap = 489940kB
    Aug 17 23:31:51 monserveur kernel: Free swap:            0kB
    Aug 17 23:31:51 monserveur kernel: 81632 pages of RAM
    Aug 17 23:31:51 monserveur kernel: 0 pages of HIGHMEM
    Aug 17 23:31:51 monserveur kernel: 1470 reserved pages
    Aug 17 23:31:51 monserveur kernel: 668 pages shared
    Aug 17 23:31:51 monserveur kernel: 14 pages swap cached
    Aug 17 23:31:51 monserveur kernel: 0 pages dirty
    Aug 17 23:31:51 monserveur kernel: 0 pages writeback
    Aug 17 23:31:51 monserveur kernel: 64 pages mapped
    Aug 17 23:31:51 monserveur kernel: 2460 pages slab
    Aug 17 23:31:51 monserveur kernel: 828 pages pagetables
    Aug 17 23:31:51 monserveur kernel: Out of Memory: Kill process 22976 (php5-cgi) score 19274 and children.
    Aug 17 23:31:51 monserveur kernel: Out of memory: Killed process 22976 (php5-cgi).
    Voici la charge système :
    C'est la première fois que je suis confronté à ce problème. Je suppose que c'est PHP5 (en cgi avec suPHP) qui a bloqué la machine en voulant calculer les miniatures d'images trop lourdes et trop nombreuses, mais j'aimerais savoir exactement ce qui s'est passé, et pourquoi un seul processus a bloqué toute la machine. Je croyais les zones de mémoire protégées. Ai-je atteint les limites de ma machine (P III 800 MHz, ~400 Mo de RAM) ?

    Je vous remercie par avance

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Août 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 118
    Points : 142
    Points
    142
    Par défaut memory_limit
    Bonjour,
    Il faut sans doute baisser le memory-limit et le max-execution-time dans ton php.ini.

    Enfin, il faut t'assurer qu'Apache à un Timeout raisonnable (30 secondes me semble être une bonne valeur).

    Par ailleurs, il semble bizarre sur une config perso d'utiliser php-cgi, bien moins performant que le module.

    Enfin envisager une génération de miniatures en batch via un cron est peut-être une bonne idée.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Citation Envoyé par d-jo Voir le message
    Il faut sans doute baisser le memory-limit et le max-execution-time dans ton php.ini.
    le max-execution-time est à 30 secondes, et le memory-limit est à 16M.
    Citation Envoyé par d-jo Voir le message
    Enfin, il faut t'assurer qu'Apache à un Timeout raisonnable (30 secondes me semble être une bonne valeur).
    Le timeout de Apache correspond à la valeur par défaut (300 de mémoire). Je vais effectuer un ajustement à ce niveau.
    Citation Envoyé par d-jo Voir le message
    Par ailleurs, il semble bizarre sur une config perso d'utiliser php-cgi, bien moins performant que le module.
    Je suis passé du module au php-cgi car, hébergeant plusieurs sites sur mon serveur, je l'utilise en conjonction avec suphp. Cela me permet de cloisonner les sites et d'utiliser des php.ini personnalisés.
    Citation Envoyé par d-jo Voir le message
    Enfin envisager une génération de miniatures en batch via un cron est peut-être une bonne idée.
    Bonne idée effectivement ! Je vais quand-même voir s'il existe des scripts plus optimisés.

    Par ailleurs, je songe à remplacer ce serveur (PIII 800, 384 Mo de RAM) par une configuration plus puissante et plus récente. J'ai remarqué des config' dual core 2Ghz et 3 Go de RAM à environ 300€. Et avec de la chance, les alimentations actuelles consommeront moins.


    Merci de ton aide

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Août 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 118
    Points : 142
    Points
    142
    Par défaut
    Je suis passé du module au php-cgi car, hébergeant plusieurs sites sur mon serveur, je l'utilise en conjonction avec suphp. Cela me permet de cloisonner les sites et d'utiliser des php.ini personnalisés.
    Tu peux obtenir un résultat ~semblable avec mod_php :

    - personnalisation de php avec des php_value, php_flag, php_admin_value dans le virtualhost
    - utilisation d'un utilisateur distinct par site av ec le DocumentRoot dans son /home
    - utilisation des acl (on peut aussi s'en sortir avec les groupes) pour permettre à Apache d'accéder aux fichiers du site et d'écrire dans certains répertoires (~docroot/tmp ~docroot/upload ...).

    Avec cette stratégie tu peux donner à apache un utilisateur sans shell (nodody) ce qui est bien plus sûr à plusieurs niveau. Identification immédiate et verification des fichiers uploadés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    find  ~docroot/img -user nobody | while read f  
    do 
     file $f |grep  -q image || echo "$f n'est pas une image"
    done
    Interdiction d'écrire dans certains répertoires (chmod o-r dir)
    Plus grande difficulté en cas d'exploit a obtenir un shell
    Meilleure facilité d'identification des process (ps -U nobody)
    ...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    je ne pensais pas que l'on puisse faire une gestion aussi soignée des droits avec le seul module php. Je vais me pencher là-dessus.

    Je te remercie de ton aide

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Points : 712
    Points
    712
    Par défaut
    php en module ne changera pas le fait que ton process a bouffé toute la mémoire. C'est effectivement étrange. La meilleure solution semble d'utiliser des programmes d'imagemagick pour faire les calculs.

  7. #7
    Membre habitué

    Profil pro
    Inscrit en
    Août 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 118
    Points : 142
    Points
    142
    Par défaut
    php en module ne changera pas le fait que ton process a bouffé toute la mémoire. C'est effectivement étrange. La meilleure solution semble d'utiliser des programmes d'imagemagick pour faire les calculs.
    C'est php ou fastcgi qui déconne dans ce cas ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    je n'utilise pas fast-cgi, mais php5-cgi + suPHP. Existe-t-il un système de protection contre cet abus de ressources ? Je pensais que php et apache disposaient de mesures de protection à ce sujet. Apparemment non.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Points : 712
    Points
    712
    Par défaut
    Et si tu le lances en ligne de commande, ton script php, ca donne quoi ?

Discussions similaires

  1. [Débutant] Déporter un calcul vers un serveur MATLAB?
    Par Giansolo dans le forum MATLAB
    Réponses: 0
    Dernier message: 18/03/2010, 12h09
  2. Réponses: 2
    Dernier message: 26/04/2007, 14h04
  3. Conseils pour serveur calculs de maths en C
    Par smithofmatrix dans le forum Réseau
    Réponses: 1
    Dernier message: 08/11/2006, 13h51
  4. Template ( phpBB-Phplib ) et affichage de miniature via GD2 :x
    Par Rohann dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 06/09/2006, 10h47
  5. [gd2] alleger travail serveur
    Par guns17 dans le forum Langage
    Réponses: 3
    Dernier message: 05/09/2006, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo