Tôi đang cố gắng kiểm tra một điều kiện cụ thể sẽ chỉ xảy ra nếu perl
có số malloc
không thành công do không còn bộ nhớ. Tôi muốn perl
chết nhanh nhất có thể. Tôi đã tìm cách ăn chay sẽ được tạo ra một số mảng lớn nhưCách tốt nhất để buộc Perl 5 hết bộ nhớ một cách nhanh chóng trên OS X là gì?
perl -le '$_->[100_000_000_000] = 1 for \(@a, @b, @c, @d); <>'
Nhưng tôi phải giết nó sau khi trao đổi của tôi trúng 5 buổi biểu diễn không có dấu hiệu dừng lại (Tôi đang trên OS X 10.6).
tôi chỉ thử nghiệm nó trên Linux và nó chết khá nhanh:
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
Vì vậy, vấn đề có vẻ là OS X và dynamic_pager
của nó.
Tôi chỉ cố gắng vô hiệu hóa dynamic_pager
với
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
và khởi động lại, nhưng máy chỉ bị treo hoàn toàn. Nỗ lực tiếp theo của tôi là thay đổi tệp cấu hình com.apple.dynamic_pager.plist
để ghi tệp vm vào một phân vùng rất nhỏ.
Lạ lùng là bạn không có '" x "x 9e9'. – tsee
@tsee Phải mất thời gian để xây dựng chuỗi, nhưng 'perl -e '@a [9e8] = 1'' chỉ là một' malloc'. –
"Tôi đã phải giết nó sau khi trao đổi của tôi đạt 5 gig mà không có dấu hiệu dừng lại (Tôi đang ở OS X 10.6)." - Mac OS X cho thấy loại hành vi đó thường xuyên, bao gồm các trường hợp như 'malloc (-1)'. Hãy thử bất kỳ hệ điều hành nào khác mà bạn có thể vô hiệu hóa việc hoán đổi một cách rõ ràng. (Không bao giờ thử làm điều đó trên máy Mac của tôi - nhưng thực hiện điều đó một cách ngẫu nhiên trên Linux.) – Dummy00001