Hi,
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)
Wo kann ich sehen, welche Prozesse alles im Swap liegen?
Andreas
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
On Fri, Apr 20, 2001 at 01:00:25PM +0200, A . Kretschmer wrote:
Hallo,
Wo kann ich sehen, welche Prozesse alles im Swap liegen?
aus der manpage zu ps:
Programs swapped out to disk will be shown without command line arguments, and unless the c option is given, in brackets. ~~~~~~~~
... allen eine schoenes Wochenende! Marcus
On Friday 20 April 2001 18:29, Marcus Obst wrote:
On Fri, Apr 20, 2001 at 01:00:25PM +0200, A . Kretschmer wrote:
Wo kann ich sehen, welche Prozesse alles im Swap liegen?
aus der manpage zu ps:
Programs swapped out to disk will be shown without command line arguments, and unless the c option is given, in brackets. ~~~~~~~~
korrigiert mich, wenn ich falsch liege, aber: soweit ich das erkennen kann gilt diese Anzeige nur für Prozesse, die _komplett_ aus dem RAM geräumt wurden.
Heimatkunde-Beispiel: einer meiner Bash-Prozesse sah eben noch so aus (/proc/11456/statm): 86 0 0 0 0 0 0 und "ps x" hat das dazu gesagt: 11456 pts/8 SW 0:00 [bash] Nachdem ich ihn geweckt habe: 175 130 98 55 0 75 32
Auszug aus proc.txt: ------------- The statm file contains more detailed information about the process memory usage. It contains seven values with the following meanings:
size total program size resident size of in memory portions shared number of the pages that are shared trs number of pages that are 'code' drs number of pages of data/stack lrs number of pages of library dt number of dirty pages --------------
Interessant sind also die ersten beiden Zahlen. Demnach sind im ersten Fall alle Pages geswappt (resident=0), in Fall 2 sind noch 45 Seiten im Swap (size-resident), aber ps zeigt den Prozess ohne [] an.
Wer jetzt meint 86!=175: es ist wirklich der selbe Prozess und ich habe nur ein "ps" ausgeführt um zu sehen, ob ich die richtige Bash erwischt habe - ich nehme an, dass es sich bei der Differenz um Pages handelt, die nicht im Swap, sondern in Bibliotheksdateien zu suchen sind (shared). Was übrig bleibt schiebe ich auf malloc.
Konrad
lug-dd@mailman.schlittermann.de