Python-Speicherbedarf im Vergleich zur Heap-Größe
Ich habe einige Speicherprobleme, während ich ein Python-Skript verwende, um ein großes auszugebensolr Abfrage. Ich benutze diesolrpy Bibliothek zur Anbindung an den solr-Server. Die Abfrage gibt ungefähr 80.000 Datensätze zurück. Unmittelbar nach dem Ausgeben der Abfrage beträgt der Python-Speicherbedarf in den oberen Sprechblasen ca. 190 MB.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8225 root 16 0 193m 189m 3272 S 0.0 11.2 0:11.31 python
...
Zu diesem Zeitpunkt sieht das Heap-Profil wie folgt aus:
Partition of a set of 163934 objects. Total size = 14157888 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 80472 49 7401384 52 7401384 52 unicode
1 44923 27 3315928 23 10717312 76 str
...
Die Unicode-Objekte repräsentieren die eindeutigen Kennungen der Datensätze aus der Abfrage. Zu beachten ist, dass die gesamte Heap-Größe nur 14 MB beträgt, während Python 190 MB physischen Speicher belegt. Sobald die Variable, in der die Abfrageergebnisse gespeichert sind, den Gültigkeitsbereich verlässt, gibt das Heap-Profil die Garbage Collection korrekt wieder:
Partition of a set of 83586 objects. Total size = 6437744 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 44928 54 3316108 52 3316108 52 str
Der Speicherbedarf bleibt jedoch unverändert:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8225 root 16 0 195m 192m 3432 S 0.0 11.3 0:13.46 python
...
Warum gibt es so große Unterschiede zwischen dem physischen Speicherbedarf von Python und der Größe des Python-Heaps?