2010-09-05 8 views
9

Próbuję przetestować konkretny warunek, który wystąpi, jeśli perl ma malloc, który nie działa z powodu braku pamięci. Chciałbym, aby perl umarł tak szybko, jak to możliwe. Pomyślałem fasted sposób byłoby utworzyć kilka ogromnych tablic jakJaki jest dobry sposób na szybkie wymazanie pamięci Perla 5 w systemie OS X?

perl -le '$_->[100_000_000_000] = 1 for \(@a, @b, @c, @d); <>'

Ale miałem go zabić po moim wymiany hit 5 gig bez oznak zatrzymania (jestem na OS X 10.6).

Właśnie testowałem go na Linuksie i to dość szybko umiera:

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 

więc problem wydaje się być OS X i jego dynamic_pager.

Ja tylko starałem wyłączając dynamic_pager z

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist 

i ponownym uruchomieniu, ale maszyna po prostu zawiesza się całkowicie. Następną moją próbą będzie zmiana pliku konfiguracyjnego com.apple.dynamic_pager.plist w celu zapisania plików vm na bardzo małej partycji.

+1

Dziwne, że nie "x" x 9e9'. – tsee

+0

@tsee Potrzeba czasu, aby zbudować ciąg znaków, ale 'perl -e '@a [9e8] = 1'' jest faktycznie tylko' malloc'. –

+0

"Musiałem go zabić po tym, jak moje zamiany trafiły 5 koncertów bez śladów zatrzymania (jestem na OS X 10.6)." - Mac OS X pokazuje często ten typ zachowania, w tym przypadki takie jak 'malloc (-1)'. Wypróbuj dowolny inny system operacyjny, w którym możesz jawnie wyłączyć zamianę. (Nigdy nie próbowałem tego robić na moim Macu - ale rób to od niechcenia na Linuksie). – Dummy00001

Odpowiedz

5

W poprzednim pytaniu „How to simulate memory allocation errors”, użytkownik freespace zasugerował użycie ulimit z konta użytkownika Test, aby ograniczyć ilość pamięci, które mogłyby zostać wykorzystane. To może zrobić, co chcesz, bez konieczności przydzielania ogromnej ilości pamięci.

+0

To nie działa na OS X. Próbowałem 'ulimit -m 64; perl -e '$ s = "x" x (1024 * 1024 * 100); <> '' i sprawdzone użycie pamięci, a program perla posiadał dwieście megabajtów. –

+1

IIRC powinno to być 'ulimit -d', a nie' -m'. – Dummy00001

Powiązane problemy