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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage