Запуск серверов Debian Squeeze с PHP 5.3.x (происходит как с Apache, так и с nginx). Я вижу случайные вхождения фатальной ошибки, не объявленной статическим свойством. Часто это относится к следующему коду:
class aliro extends aliroBase { private static $instance = null; public static function getInstance () { return self::$instance instanceof self ? self::$instance : (self::$instance = new self()); } ...
и заявляет, что aliro::$instance
не объявлен в последней строке, указанной выше (не считая закрывающей фигурной скобки). Но переменная довольно явно объявлена всего лишь несколькими строками ранее. (Точное сообщение об ошибке «PHP Fatal error: доступ к необъявленному статическому свойству: aliro :: $ instance в /var/www/apic/public_html/aliro.php в строке 91»).
Этот код выполняется для каждого запроса на сервер, который в настоящее время работает около 1250 запросов в час. Но ошибка появляется один раз в час.
Одновременно syslog может отображать сообщение об ошибке suhosin:
Oct 22 11:29:45 apic suhosin[20764]: ALERT-SIMULATION - canary mismatch on efree() - heap overflow detected at 0x2ec9118
или ошибка ядра, такая как:
Oct 22 10:29:43 apic kernel: [83469.382141] php[9479] general protection ip:6a8161 sp:7fffa270ec20 error:0 in php5[400000+6f9000]
или
Oct 22 09:29:45 apic kernel: [79871.245018] php[705]: segfault at 27f2298 ip 00007f24229e640e sp 00007fff13aca388 error 6 in libc-2.11.2.so[7f2422968000+158000]
Cron запускается каждые пять минут, чтобы вызвать узел munin, но ошибки возникают только один раз в час. Что может быть причиной этого?
Будучи неповторимыми, неясно, что можно сделать, хотя ошибки создают риск повреждения данных. Какие-либо предложения?