Ich versuche eine bestimmte Bedingung zu testen, die nur auftritt, wenn perl
eine malloc
hat, die fehlschlägt, weil kein Speicher mehr vorhanden ist. Ich möchte perl
so schnell wie möglich sterben. Ich dachte, die gefastet Weg, um einige große Arrays wieWas ist eine gute Möglichkeit, Perl 5 schnell genug Speicher unter OS X zu verlieren?
perl -le '$_->[100_000_000_000] = 1 for \(@a, @b, @c, @d); <>'
schaffen würde, aber ich hatte es zu töten, nachdem mein Swap-Hit 5 Gig ohne Anzeichen zu stoppen (ich bin auf OS X 10.6).
Getestet habe ich es nur auf Linux und es stirbt ziemlich schnell:
time perl -le '$_->[1_000_000_000] = 1 for \(@a, @b, @c, @d); <>'
Out of memory!
real 0m0.023s
user 0m0.012s
sys 0m0.008s
So scheint das Problem OS X und seine dynamic_pager
zu sein.
ich deaktivieren gerade versucht, die dynamic_pager
mit
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
und das Neu starten, aber die Maschine hängt nur vollständig. Mein nächster Versuch wird sein, die com.apple.dynamic_pager.plist
Konfigurationsdatei zu ändern, um die VM-Dateien auf eine sehr kleine Partition zu schreiben.
Seltsam, dass Sie nicht "x" x 9e9 ". – tsee
@tsee Es braucht Zeit, um die Zeichenfolge zu erstellen, aber 'perl -e '@a [9e8] = 1'' ist effektiv nur ein' malloc'. –
"Ich musste es töten, nachdem mein Swap 5 Gig erreicht hatte, ohne Anzeichen dafür aufzuhören (ich bin auf OS X 10.6)." - Mac OS X zeigt diese Art von Verhalten oft, einschließlich der Fälle wie 'malloc (-1)'. Versuchen Sie es mit einem anderen Betriebssystem, bei dem Sie die Auslagerung explizit deaktivieren können. (Nie versucht, das auf meinem Mac - aber tun Sie das beiläufig auf dem Linux.) – Dummy00001