it-swarm-vi.com

Đặt giới hạn bộ nhớ tiến trình (hoặc người dùng) của Windows

Có cách nào để đặt giới hạn bộ nhớ toàn hệ thống mà một quy trình có thể sử dụng trong Windows XP không? Tôi có một vài ứng dụng không ổn định, hoạt động tốt trong hầu hết thời gian nhưng có thể gặp lỗi dẫn đến việc ăn toàn bộ nhớ trong vài giây (hoặc ít nhất là tôi cho rằng đó là nó). Điều này dẫn đến việc thiết lập lại khó khăn khi Windows trở nên hoàn toàn không phản hồi và tôi mất việc.

Tôi muốn có thể làm một cái gì đó như/etc/giới hạn trên Linux - ví dụ như cài đặt M90 (để đặt 90% bộ nhớ tối đa cho một người dùng để phân bổ). Vì vậy, hệ thống nhận được 10% còn lại không có vấn đề gì.

45
Mike Minicki

Sử dụng Windows Đối tượng công việc . Các công việc giống như các nhóm quy trình và có thể giới hạn mức sử dụng bộ nhớ và ưu tiên xử lý.

36
Adam Mitz

Sử dụng công cụ Trình xác minh ứng dụng (Trình xác minh ứng dụng) từ Microsoft.

Trong trường hợp của tôi, tôi cần mô phỏng bộ nhớ không còn nữa nên tôi đã làm như sau trong công cụ:

  1. Đã thêm ứng dụng của tôi
  2. Cơ bản không được kiểm tra
  3. Đã kiểm tra mô phỏng tài nguyên thấp [.__.]
    • Đã thay đổi TimeOut thành 120000 - ứng dụng của tôi sẽ chạy bình thường trong 2 phút trước khi mọi thứ có hiệu lực.
    • Đã thay đổi HeapAlloc thành 100 - 100% cơ hội lỗi phân bổ heap
    • Đặt ngăn xếp thành đúng - ngăn xếp sẽ không thể phát triển lớn hơn nữa
  4. Tiết kiệm
  5. Bắt đầu ứng dụng của tôi

Sau 2 phút, chương trình của tôi không còn có thể phân bổ bộ nhớ mới và tôi đã có thể xem mọi thứ đã được xử lý như thế nào.

23
Jesse Vogt

Tùy thuộc vào ứng dụng của bạn, có thể dễ dàng giới hạn bộ nhớ mà trình thông dịch ngôn ngữ sử dụng. Ví dụ: với Java, bạn có thể đặt lượng RAM, JVM sẽ được phân bổ.

Mặt khác, có thể đặt nó một lần cho mỗi quy trình với API windows

Hàm SetProcessWorkingSetSize

4
Eric

Không có cách nào để làm điều này mà tôi biết, mặc dù tôi rất tò mò muốn đọc nếu có ai có câu trả lời hay. Tôi đã suy nghĩ về việc thêm một cái gì đó như thế này vào một trong những ứng dụng mà công ty tôi xây dựng, nhưng không tìm thấy cách nào tốt để làm điều đó.

Một điều tôi có thể nghĩ đến (mặc dù không trực tiếp tại điểm) là tôi tin rằng bạn có thể giới hạn tổng mức sử dụng bộ nhớ cho ứng dụng COM + trong Windows. Tất nhiên, nó sẽ yêu cầu ứng dụng phải được viết để chạy trong COM +, nhưng đó là cách gần nhất mà tôi biết.

Công cụ của bộ công việc là tốt (Đối tượng công việc cũng kiểm soát các bộ làm việc), nhưng đó không phải là tổng mức sử dụng bộ nhớ, chỉ sử dụng bộ nhớ thực (được phân trang) bất cứ lúc nào. Nó có thể hoạt động cho những gì bạn muốn, nhưng afaik nó không giới hạn tổng bộ nhớ được phân bổ.

3
Nick