2009-05-18 8 views
2

Wir sind dran, unsere Drupal-Site zu optimieren. Wir verwenden Siege, um die Leistung zu messen (als drupal Besucher).Drupal site - Memcache Verbindungsfehler

Env: Nginx + FastCGI + Memcache

Siege läuft gut für ein paar Sekunden, und dann laufen wir in einen Verbindungsfehler: Beispiel:

HTTP/1.1 200 29.18 secs: 5877 bytes ==>/
HTTP/1.1 200 29.39 secs: 5877 bytes ==>/
warning: socket: -1656235120 select timed out: Connection timed out 
warning: socket: -1673020528 select timed out: Connection timed out 

die gleiche Siege Test confiuration Verwendung, Nginx + FastCGI + Drupal Cache scheint gut zu funktionieren. Beispiel:

HTTP/1.1 200 1.41 secs: 5868 bytes ==>/
HTTP/1.1 200 1.40 secs: 5868 bytes ==>/

Wie Sie sehen können, ist Reaktionszeit viel höher mit MemCache, zusätzlich zu den Verbindungsfehler.

Irgendeine Idee, was könnte hier falsch sein ... und warum Drupal Fehler mit Memcache unter Last wirft?

Memcache wird auf einer separaten Instanz ausgeführt. 2 MB Speicher für MemCache zugewiesen.

Antwort

3

I erraten Sie, dass Sie keine Memcached-Verbindungen haben. Bitte überprüfen Sie Ihre Memcached-Installation mit einem einfachen Skript jede Sekunde. Dann starte die Belagerung. Ich denke, Dein Memcached reagiert nach einer Weile nicht mehr.

-Test memcache PHP-Skript:

<?php 
$memcache = new Memcache; 
$memcache->connect('localhost', 11211) or die ('Unable to connect'); 
$version = $memcache->getVersion(); 
echo 'Server version: '.$version; 
?> 

Was Ich denke, passiert ist, dass Sie nicht die persistenten Verbindungen in memcache deaktivieren haben und sie hängen, um in den PHP-Threads. Memcached kann ~ 1023 von ihnen auf einmal bedienen, und das reicht möglicherweise nicht während des Siedens.

könnten Sie auch ab, Apache-Benchmarking-Tool mit dem genauen Blick auf die -c Schalter versuchen. Spielen Sie damit herum und sehen Sie, wie sich die Ergebnisse bei verschiedenen Werten ändern.

Schließlich sollten Sie eine tcpdump auf Ihrem Memcached-Port (in der Regel 11211) auf der PHP-Maschine ausführen, um herauszufinden, was mit den Verbindungen passiert. Beginnt drupal sie? Antwortet der andere Host mit einer RST oder Timeout?

Es gab einen Fehler in der Memcached-PHP-Dokumentation api, der besagt, dass die Verbindungen standardmäßig nicht persistent sind. Sie sind persistent standardmäßig (nun, sie waren zu der Zeit, als ich das Problem hatte).

Fühlen Sie sich frei, diese Antwort zu kommentieren, ich werde die Kommentare lesen und bei Bedarf weiter helfen.