On Friday 20 April 2001 13:00, A . Kretschmer wrote:
ich habe hier zu Testzwecken einen Rechner, der u.a. PostgreSQL, Apache und PHP4 macht. Die Kiste hat nur 32 MByte ...
Wenn ich eine gesamte Tabelle abfrage und mittels Indianer/PHP4 daraus eine HTML-Datei baue, dauert das bei über 230 Zeilen ca. 15 Sekunden, dieselbe Abfrage im psql - Monitor null Komma nix, also ist der Engpass im Zusammenspiel PSQL und PHP.
Um jede Zeile der Ergebnismenge zu holen, mache ich ein pg_fetcharray() von der Ergebnismenge, ich vermute, dadurch habe ich massig Prozesswechsel und bei dem Speicher swappt die Kiste. (18 MByte Swap)
Eventuell ein Mistverständnis: Linux swapt nicht, es page'd. D.h. es kann durchaus sein, dass Dein Programm 4000 Speicherseiten besitzt (a 4096 Byte auf Intel), aber nur 3 Seiten im RAM liegen und es geht trotzdem...
Das Problem ist eher pg_fetcharray: es kopiert die gesamte Zeile des DB-Cursors samt Metadaten in den Speicher von PHP. Ich würde es mal mit anderen Abfrageroutinen versuchen (bei MySQL gibt es z.B. noch mysql_result(), das jeweils nur 1 Element liefert).
Wo kann ich sehen, welche Prozesse alles im Swap liegen?
Das willst Du nicht wirklich - oder?
Laut /usr/src/linux/Documentation/proc.txt: /proc/<pid>/statm
....aber die Interpretation der einzelnen Werte bleibt Dir überlassen.
Das Swapping der einzelnen Prozess-Teile geht so: Speichersegment Swapfile ----------------------------------- Programmcode Befehlsdatei (.../bin/executable) Bibliothekscode Bibliotheksdatei (.../lib/libirgendwas.so) Konstanten die Datei, in der sie definiert sind (Programm oder Bibo) Variablen/Heap Swap-Device Stack Swap-Device
Was genau da in /proc geschrieben wird lese bitte selbst im Kernelcode nach...
Konrad