Unix sắp xếp bộ nhớ


7

Tôi đang sắp xếp tệp 25 GB chứa 200 triệu dòng trên Fedora 18 bằng cách sử dụng:

sắp xếp -S 10G -T / bigdisk bigfile

và tôi đang bị giết do không có bộ nhớ. Quá trình không tối đa hóa RAM của tôi trước khi chết (12 GB miễn phí) và dung lượng ổ đĩa vẫn ổn.

Bất kỳ đề xuất như nguyên nhân đánh giá cao. Tôi chắc chắn sắp xếp có thể quản lý điều này do phân vùng và hợp nhất của nó.

Thêm thông tin từ dmesg

[87278.935572] Out of memory: Kill process 1971 (sort) score 258 or sacrifice child
[87278.935574] Killed process 1971 (sort) total-vm:4512168kB, anon-rss:4237040kB, file-rss:584kB 

Hệ thống có bất kỳ giới hạn cho mỗi quá trình hoặc mỗi người dùng RAM không? (kiểm tra với giới hạn hoặc ulimit)
Hennes

Không, Firefox và nhật thực quản lý để ăn tất cả :)
Aiden Bell

Nó thực sự bị giết? Bạn có thể kết nối với strace ngay trước khi vụ tai nạn xảy ra và xem xét những gì đang thực sự xảy ra.
Hauke ​​Laging 15/03/13

1
Có phải tất cả các dòng có cùng chiều dài? Sau đó, tôi sẽ đề xuất một vị trí sắp xếp, tức là mmap tệp và xử lý nhanh.
ott--

1
Tôi đã cùng một vấn đề khi tôi sử dụng /run/shmnhư của tôi /bigdiskđể lưu trữ các loại tập tin tạm thời. Có vẻ như kernel coi đĩa ram /run/shmlà quan trọng hơn, vì vậy khi sắp xếp ghi vào nó và bộ nhớ hết, kernel đã giết sắp xếp. Thay vào đó, sử dụng một đĩa cứng VM chậm chạp đã giải quyết nó.
drevicko

Câu trả lời:


3

Đừng sử dụng -S 10G, nó là quá nhiều (và có thể không làm những gì bạn nghĩ). Khởi chạy OOMkiller nghĩa là hệ thống của bạn đang sử dụng tất cả bộ nhớ của nó.

Theo thuật toán được sử dụng bởi sort, nó sẽ sử dụng bộ nhớ theo những gì có sẵn : một nửa số lớn nhất giữa TotalMem / 8 và AvailableMem.

Vì vậy, ví dụ, nếu bạn có 4 GB mem có sẵn (trong số 8 GB), sortsẽ sử dụng 2 GB RAM. Nó cũng sẽ tạo nhiều tệp 2 GB trong / bigdisk và cuối cùng hợp nhất sắp xếp chúng.


2
Để công bằng, sắp xếp bị loại bỏ nếu tôi sử dụng -S hay không. Cả báo cáo top và / Proc / meminfo tôi có bộ nhớ miễn phí về cái chết. Máy có 16G ram và chỉ có 3 thực sự được sử dụng khi quá trình sắp xếp được khởi chạy. Sử dụng thủ công tách, sắp xếp các bộ phận và chúng sắp xếp - không hoạt động mà không có vấn đề về bộ nhớ.
Aiden Bell

@AidenBell Tôi vừa nghĩ đến một điều: bạn có đang sử dụng phiên bản 32 bit sortkhông? Kiểm tra với file $(which sort).
Toto

không 64-bit. Tôi bắt đầu nghĩ rằng nó có thể là một lỗi thở hổn hển thực sự ở đâu đó.
Aiden Bell

1

Trả lời từ nhận xét của tôi:

Tôi đã cùng một vấn đề khi tôi sử dụng /run/shmnhư của tôi /bigdiskđể lưu trữ sortcác file tạm. /run/shmlà một đĩa ram, vì vậy khi cần sắp xếp để lưu trữ kết quả một phần trên đĩa (điều này thực hiện khi bộ nhớ gần hết), bộ nhớ đã hết. Hạt nhân bị giết sort, vì đó là quá trình sử dụng nhiều bộ nhớ nhất.

Sử dụng một vị trí được lưu trữ trên một đĩa vật lý thay vì đĩa ram đã giải quyết nó.


-1

Thử cài đặt vm.overcommit_memory = 1: «đào

Khi cờ này là 1, kernel giả vờ luôn có đủ bộ nhớ cho đến khi nó thực sự hết.

»»

làm hoán đổi sử dụng.


1
Kẻ giết người OOM chỉ được kích hoạt khi "nó thực sự hết" bộ nhớ. Vì vậy, cài đặt này sẽ không giải quyết bất cứ điều gì. Nó có thể có nếu Out of mem nhắn đến từ sortkhông từ hạt nhân.
Totor

RTFM: „Thẻ Kẻ giết người OOM có thể bị vô hiệu hóa hoàn toàn bằng lệnh sau. Điều này không được khuyến nghị cho các môi trường sản xuất, vì nếu tình trạng hết bộ nhớ xuất hiện, có thể có hành vi không mong muốn tùy thuộc vào tài nguyên và cấu hình hệ thống có sẵn. Có thể mọi thứ từ kernel hoảng loạn đến treo tùy thuộc vào tài nguyên có sẵn cho kernel tại thời điểm điều kiện OOM. sysctl vm.overcommit_memory = 2 echo "vm.overcommit_memory = 2" >> /etc/sysctl.conf ...”- oracle.com/technetwork/articles/servers-storage-dev/...
poige

Tôi không thấy sự liên quan của bình luận của bạn. Vô hiệu hóa OOM-killer sẽ không giải quyết được vấn đề, đó là: sortsử dụng / cần quá nhiều bộ nhớ. Với overcommit_memory=2, sortsẽ chỉ thất bại malloc()và rất có thể sẽ không sắp xếp, sau đó.
Típ

câu trả lời của tôi không = 2. Đó là một trích dẫn cho thấy rằng các thiết lập của tùy chọn này có liên quan trực tiếp đến việc giết chết OOM. Nếu bạn muốn biết rõ hơn về chủ đề này, tốt, được, điều đó sẽ phù hợp với mục đích của bạn (hy vọng): lwn.net/Articles/317814
poige
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.