phpbar.de logo

Mailinglisten-Archive

[php] Zend Optimizer & Performance

[php] Zend Optimizer & Performance

Alexander Skwar php_(at)_phpcenter.de
Mon, 15 Apr 2002 15:30:02 +0200


»Enrico Weigelt« sagte am 2002-04-11 um 18:26:26 +0200 :
> wenn ich das richtig durchblicke, werden beim pconnect doch
> die aeltesten oder am laensten idlen connections weggekillt, wenn
> max.conn. ueberschritten wird ... korrigiert mich bitte, wenn ich
> da falsch liege.

Von der Theorie hast Du recht, allerdings führt pconnect oft dazu, das
es sehr, sehr viele Prozesse gibt die nur vor sich hinidlen und somit
den Server in die Knie zwingen.  pconnect in PHP mit Apache 1.x ist
sinnlos.

Ich hänge mal eine Mail von Björn Schotte an, in der er gut erklärt,
warum pconnects tödlich sind.

Alexander Skwar
--
How to quote:	http://learn.to/quote (german) http://quote.6x.to (english)
Homepage:	http://www.iso-top.de      |     Jabber: askwar_(at)_charente.de
   iso-top.de - Die günstige Art an Linux Distributionen zu kommen
                       Uptime: 18 hours 47 minutes
Return-Path: <bounce-iw-tec-2855061_(at)_kbx.de>
Delivered-To: askwar_(at)_teich.garten.digitalprojects.com
Received: from localhost (localhost.localdomain [127.0.0.1]) by
  teich.garten.digitalprojects.com (Postfix) with ESMTP id 7FA5DB75F1
  for <askwar_(at)_teich.garten.digitalprojects.com>; Wed,  3 Apr 2002
  18:46:17 +0200 (CEST)
Delivered-To: gr-ath-cx-privat_(at)_gr.ath.cx
Received: from gr.ath.cx [217.70.160.109] by localhost with IMAP
  (fetchmail-5.9.10) for askwar_(at)_teich.garten.digitalprojects.com
  (single-drop); Wed, 03 Apr 2002 18:46:17 +0200 (CEST)
Received: (qmail 7814 invoked by uid 510); 3 Apr 2002 15:24:43 -0000
Delivered-To: host-homelinux-org-ASkwar_(at)_host.homelinux.org
Received: (qmail 7811 invoked from network); 3 Apr 2002 15:24:42 -0000
Received: from listserver.kbx.de (212.40.160.60) by devel.net-attach.de
  with SMTP; 3 Apr 2002 15:24:42 -0000
Date: Wed, 3 Apr 2002 17:24:38 +0200
From: =?iso-8859-1?Q?Bj=F6rn?= Schotte <bjoern_(at)_baer.main.de>
To: "Die Technikliste der i-worker" <iw-tec_(at)_kbx.de>
Subject: [iw-tec] Re: Mysql: Too many connections
Message-ID: <20020403172438.A30900_(at)_baer.main.de>
References: <151399253005.20020403171500_(at)_Hofmeir.de>
Content-Disposition: inline
In-Reply-To: <151399253005.20020403171500_(at)_Hofmeir.de>
User-Agent: Mutt/1.3.18i
List-Unsubscribe: <mailto:leave-iw-tec-2855061P_(at)_kbx.de>
List-Subscribe: <mailto:subscribe-iw-tec_(at)_kbx.de>
List-Owner: <mailto:owner-iw-tec_(at)_kbx.de>
X-URL: <http://www.i-worker.de>
X-List-Host: <http://www.kbx.de/>
Reply-To: "Die Technikliste der i-worker" <iw-tec_(at)_kbx.de>
Sender: bounce-iw-tec-2855061_(at)_kbx.de
X-LYRIS-Message-Id: <LYRIS-2855061-981707-2002.04.03-17.24.40--ASkwar#ho
  st.homelinux.org_(at)_kbx.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline; filename=mutt-teich-12329-90
Content-Transfer-Encoding: quoted-printable

* Stefan Hofmeir wrote:
> Auf die mysql-Tabellen wird mittels persistenter Verbindung
> zugegriffen (mysql_pconnect).
> Welche Ursache könnte die plötzliche Überlastung haben?

mysql_pconnect(). Weil mysql_pconnect() nur für Persistenz
innerhalb eines Apache-Prozess für jeweils ein einziges
Verbindungsparameter-Tripel (DB - Host, User, Passwort)
sorgt.

Ein Apache (ich gehe davon aus, dass Apache zum Einsatz
kommt) ist ein forkender Webserver, in der Regel hast du
also X "stehende" Apache-Prozesse, die auf eine Connection
warten:

apache (Mutterprozess)
\
 \-- apache child 1
 |
 |
 \-- apache child
 |
 |
 \-- apache child
 |
 .
 .
 .


Jeder dieser Prozesse arbeitet einen Request ab. Kommt
zum Zeitpunkt X ein Request an Child 1 für index.php an
und index.php öffnet mit mysql_pconnect() eine für diesen
Apache Child persistente Verbindung. Kommt zum Zeitpunkt
X+Y ein weiterer Request an das gleiche Child mit gleichem
mysql_pconnect()-DB-Verbindungstripel, so kann die Verbindung
zu MySQL, die noch steht, benutzt werden.

Landet der Request dagegen bei einem der anderen Childs,
so wird eine neue Verbindung zu MySQL aufgemacht.

Irgendwann hast du dann so viele Apache-Prozesse, die jeder
für sich eine MySQL-Verbindung offen halten, dass die Anzahl
der MySQL-Verbindungen zuviel ist.

Abhilfe: auf mysql_connect() umstellen oder ein Tool wie
SRM (http://www.vl-srm.net/) einsetzen, das echtes Connection-
Pooling kann. Das Problem ist nicht auf PHP zurückzuführen,
sondern auf die Art und Weise, wie Apache gemacht ist.

--
PHP-Support * realitätsnahe Performance-Messungen mit Code-Analyse
    Webapplikationsentwicklung * PHP-Schulungen * Consulting

             0700-THINKPHP -*- bjoern_(at)_thinkphp.de

------------------------------------------------------------------------
Um diese Liste zu verlassen, schreiben Sie eine Mail an:
mailto:leave-iw-tec-2855061P_(at)_kbx.de


php::bar PHP Wiki   -   Listenarchive