Je travaille sur un travail CRON qui appelle un script PHP qui effectue beaucoup de travail avec des boucles de base de données.
Il s'exécute correctement lorsque je limite le jeu de données, mais lorsque je l'exécute avec le jeu de données complet, le script génère une erreur avec le message suivant:
Killed
set_time_limit est à (0) et memory_limit est à (-1)
Voici la section de code où il meurt systématiquement:
echo "I'm in _getMemberDemographicAttrs\n";
if (! empty ( $member_id )) {
$query .= ' AND member_id = ' . $member_id;
}
$result = mysql_query ( $query, $this->_db );
if ($result) {
while ( $rule = mysql_fetch_assoc ( $result ) ) {
$rules [] = $rule;
}
if (! empty ( $rules )) {
mysql_free_result ( $result );
echo "I'm leaving _getMemberDemographicAttrs\n";
return $rules;
}
}
La sortie ressemble à ceci:
I'm in _getMemberDemographicAttrs<br/>
I'm leaving _getMemberDemographicAttrs<br/>
I'm in _getMemberDemographicAttrs<br/>
I'm leaving _getMemberDemographicAttrs<br/>
I'm in _getMemberDemographicAttrs<br/>
Killed
Je n'ai jamais vu ce message d'erreur Killed
générique et je me demande pourquoi il est tué.
Vous êtes peut-être en train de déclencher le tueur de mémoire insuffisante (MOO) Linux. Vérifiez dmesg
pour les messages à ce sujet. Il dit quel processus a été tué quand cela se produit.
Moyen simple de reproduire cette erreur Killed
:
J'ai pu reproduire cette erreur sur Ubuntu 12.10
avec PHP 5.3.10
.
Créez un script PHP appelé m.php
et enregistrez-le:
<?php
function repeat(){
repeat();
}
repeat();
?>
Exécuter:
el@apollo:~/foo$ php m.php
Killed
Le programme prend 100% de la CPU pendant environ 15 secondes, puis s’arrête avec le message Killed
. Regardez dmesg | grep php
et il y a des indices:
el@apollo:~/foo$ dmesg | grep php
[2387779.707894] Out of memory: Kill process 2114 (php) score 868 or
sacrifice child
Donc, dans mon cas, le programme PHP s'est arrêté et a été imprimé "Killed", car il manquait de mémoire en raison d'une boucle infinie.
Solutions:
Dans mon cas sur CloudLinux, PHP 7.1, il s’est produit lorsque 2 processus lisaient et écrivaient dans le même fichier sans verrou.