Wie kann man zwischengespeicherte Fehler "SERVER HAT FEHLGESCHLAGEN UND IST BIS ZEITGESETZTE DEAKTIVIERUNG deaktiviert" debuggen?

8

Ich habe ein Zwei-Server-Memcached-Setup. Wenn das Memcached-Schreiben fehlschlägt, erhalte ich eine E-Mail-Benachrichtigung. Ungefähr einmal pro Tag tritt der Fehler "Server ist ausgefallen und wird bis zur zeitgesteuerten Wiederholung deaktiviert" auf, und ich habe keine Ahnung, wie ich den Grund finden kann.

Ich verwende den PHP Memcached Client.

Ich benutze keine zu langen Schlüssel. Ich habe versucht, das Flag -v hinzuzufügen, aber es hilft nicht, das Protokoll bleibt leer.

Wenn ich die Ausgabe von getStats in die Fehlerbenachrichtigung einbeziehe, erhalte ich die folgenden Informationen:

Array
(
    [192.168.0.3:11211] => Array
        (
            [pid] => 28167
            [uptime] => 3671962
            [threads] => 4
            [time] => 1358714713
            [pointer_size] => 64
            [rusage_user_seconds] => 24516
            [rusage_user_microseconds] => 130981
            [rusage_system_seconds] => 86246
            [rusage_system_microseconds] => 675512
            [curr_items] => 1616352
            [total_items] => 118339822
            [limit_maxbytes] => 2684354560
            [curr_connections] => 8
            [total_connections] => 78108681
            [connection_structures] => 356
            [bytes] => 981522779
            [cmd_get] => 1561752945
            [cmd_set] => 158718324
            [get_hits] => 1383072575
            [get_misses] => 178680370
            [evictions] => 0
            [bytes_read] => 138113231690
            [bytes_written] => 1091741700765
            [version] => 1.4.15
        )

    [192.168.0.4:11211] => Array
        (
            [pid] => -1
            [uptime] => 0
            [threads] => 0
            [time] => 0
            [pointer_size] => 0
            [rusage_user_seconds] => 0
            [rusage_user_microseconds] => 0
            [rusage_system_seconds] => 0
            [rusage_system_microseconds] => 0
            [curr_items] => 0
            [total_items] => 0
            [limit_maxbytes] => 0
            [curr_connections] => 0
            [total_connections] => 0
            [connection_structures] => 0
            [bytes] => 0
            [cmd_get] => 0
            [cmd_set] => 0
            [get_hits] => 0
            [get_misses] => 0
            [evictions] => 0
            [bytes_read] => 0
            [bytes_written] => 0
            [version] => 
        )

)
Jevgenij Evll
quelle

Antworten:

3

MEMCACHED_SERVER_TEMPORARILY_DISABLED oder " SERVER HAT FEHLGESCHLAGEN UND BIS ZEITGESETZT WURDE DEAKTIVIERT " wird von der libmemcachedBibliothek generiert . Ich kann nicht bestätigen, wie pecl_memcacheddieser Fehler behandelt wird, aber ich kann mir vorstellen, dass er als Standardverbindungsfehler behandelt wird. Diese Nachricht wird ausgegeben, wenn eine Verbindung das Zeitlimit und / oder das Wiederholungslimit überschreitet. (siehe E / A-Optionen )

Da dies ein vorübergehendes Problem ist, würden Sie Ihre PHP-Anwendung natürlich so gestalten, dass sie auf den nächsten Cache-Server übergeht, oder den betroffenen Server aus der Serverliste entfernen.

Emcconville
quelle
4
Sie sagen also, es gibt keine Möglichkeit, solche Fehler zu beseitigen? Warum treten sie dann auf? Es sollte einen Grund geben.
Jevgenij Evll
2

In meinem Fall hat das Deaktivieren der Verhaltensoption tcp_nodelayfunktioniert.

Dies scheint eine Option von zu sein pylibmc, die ein Python-Wrapper um das ist libmemcached, aber die Dokumentation sagt, dass diese Option zu denjenigen gehört, die direkt in konfiguriert werden können libmemcached.

Weitere Informationen finden Sie in den pylibmcDokumenten unter http://sendapatch.se/projects/pylibmc/behaviors.html

Eviltnan
quelle
1

In meinem Fall habe ich localhost in meinem Code in '127.0.0.1' geändert. und ich bin in der Lage, den Fehler "Server ist ausgefallen und wird deaktiviert, bis die zeitgesteuerte Wiederholung" zu beheben.

hoffe das hat geholfen

'options' => array(
            'servers' => array('127.0.0.1', 11211),
Poonam Bhatt
quelle
1

In meinem Fall war der Grund für diese Fehlermeldung ein falscher Servername.

Irgendwie war der Code, der die Konfigurationszeichenfolge für die Verwendung vorbereitete, durcheinander und ein Leerzeichen stand vor einem der Memcache-Servernamen. Dies führt zu der oben genannten Fehlermeldung beim Lesen vom Server.

Ich verwende PHP und die Memcached-Erweiterung. Das Hinzufügen des Servernamens mit dem Speicherplatz funktionierte ohne Beanstandung, dh es gibt keine interne Validierung für sie. Sie werden nur zu dem Zeitpunkt überprüft, zu dem eine Verbindung zum Server hergestellt werden muss.

Sven
quelle