2008-10-10 7 views
38

Windows XP에서 프로세스가 사용할 수있는 시스템 전체 메모리 제한을 설정하는 방법이 있습니까? 나는 대부분의 시간 동안 괜찮은 일을하는 불안정한 몇 가지 앱을 가지고 있지만 몇 초 만에 전체 메모리를 먹는 버그를 쳤을 수있다. Windows가 완전히 응답하지 않아 작업량이 줄어들어 하드 리셋이 발생합니다.Windows 프로세스 (또는 사용자) 메모리 제한 설정

Linux에서/etc/limits와 같은 것을 할 수 있기를 바란다. 예를 들어 단일 사용자가 할당 할 수있는 최대 메모리를 90 %로 설정한다. 그래서 시스템은 나머지 10 %를 얻습니다.

+0

BartPE은 이와 비슷한 기능을 수행하므로 가능해야합니다. 어떻게 생각하는지. – OregonGhost

+2

@ Michał Minicki, 선택한 대답이 어떻게 도움이되었는지 자세히 설명해 주시겠습니까? Afaict는 WINAPI를 사용하여 문제를 극복하는 방법을 설명하지만 기존 프로세스를 일반 적으로 중단하고 'CreateJobObject'로 래핑하는 응용 프로그램은 제공되지 않습니다. 내가 뭘 놓치고 있니? –

+0

@OregonGhost, 그 능력에 대한 자세한 정보가 있습니까? –

답변

28

Windows를 사용 Job Objects와 각 프로세스에 대해 한 번 설정할 수 있습니다. 작업은 프로세스 그룹과 같으며 메모리 사용 및 프로세스 우선 순위를 제한 할 수 있습니다.

4

응용 프로그램에 따라 언어 인터프리터가 사용하는 메모리를 제한하는 것이 더 쉽습니다. 예를 들어 Java의 경우 JVM이 할당 될 RAM의 양을 설정할 수 있습니다.

그렇지 않으면 윈도우 API

SetProcessWorkingSetSize Function

+8

이것은 특정 시간에 페이지 된 양만 프로세스가 처리 할 수있는 메모리 양을 실제로 제한하지 않습니다. 그것은 원래 포스터에 대한 대부분의 시간을 사용할 수 있지만 프로세스가 사용할 수있는 전체 메모리 양을 제한하는 정답은 작업 개체를 사용하는 것입니다. –

3

내가 아는 한이 방법은 없지만 누구든지 좋은 대답을하면 매우 흥미로울 것입니다. 내 회사가 만든 앱 중 하나에 이런 것을 추가하려고 생각했지만 좋은 방법이 없다고 생각했습니다.

내가 (직접적으로는 아니지만) 내가 생각할 수있는 한 가지는 Windows에서 COM + 응용 프로그램의 전체 메모리 사용을 제한 할 수 있다고 생각한다는 것입니다. 물론 COM +에서 실행되도록 앱을 작성해야하지만, 내가 아는 가장 가까운 방법입니다.

작업 세트는 좋지만 (작업 객체도 작업 세트를 제어합니다.) 총 메모리 사용량은 아니며 한 번에 실제 메모리 사용량 (페이징 인) 만 있습니다. 그것은 당신이 원하는대로 작동하지만 afaik는 할당 된 총 메모리를 제한하지 않습니다.

+1

JobObjects는 작업 또는 프로세스가 커밋 할 수있는 가상 메모리의 최대 크기를 제어 할 수도 있습니다. SetInformationJobObject 및 JOBOBJECT_EXTENDED_LIMIT_INFORMATION 구조체를 확인하십시오. –

19

Microsoft의 Application Verifier (AppVerifier) 도구를 사용하십시오.

  1. 추가 된 내 응용 프로그램
  2. 체크되지 않은 기본
  3. 검사 낮은 리소스 시뮬레이션
      : 내 경우

      나는 그래서이 도구에서 다음 한 사용할 수있는 더 이상 메모리를 시뮬레이션 할 필요가 없습니다
    • Changed TimeOut을 120000으로 변경 - 응용 프로그램이 정상적으로 실행되어 2 분이 지나면 아무 효과가 없습니다. 힙 할당 오류 true로
    • 설정 스택 100 %의 확률로 - - 100-
    • 변경된를 HeapAlloc 스택 내 응용 프로그램 시작 어떤 큰
  4. 저장
  5. 성장을 할 수 없습니다

2 분 후에 내 프로그램이 더 이상 새 메모리를 할당 할 수 없어 모든 것이 처리 된 것을 볼 수있었습니다.