NotMyFault
NotMyFault, 직역하자면 “제가 한 게 아니에요”는 시스템 충돌, 응답 없음, 그리고 메모리 누수를 의도적으로 일으키는 Sysinternals 유틸리티 프로그램이다. 재미있는 사실은 이러한 문제를 일으키는 범인은 정말 따로 존재하는 데 바로 myfault.sys
드라이버이다. GUI 또는 명령어로 실행할 수 있는 프로그램이며, 반드시 관리자 권한으로 실행되어야 한다.
명령어 버전의 유티릴티는 뒤에 알파벳 ‘c’가 붙는
notmyfaultc.exe
프로그램으로 충돌 및 프리징 증상을 일으킨다.
시스템 충돌 | 응답 없음 | 메모리 누수 |
---|---|---|
NotMyFault 유틸리티는 증상을 트러블슈팅하기 보다는 일부러 증상을 일으켜 트러블슈팅을 연습할 수 있도록 하는 프로그램이다.
시스템 충돌
총 여덟 가지의 시스템 충돌 요인 중 하나를 선택하여 Crash 버튼을 눌러 블루스크린을 발생시킨다.
시스템 콘솔로 충돌을 일으키려면 아래의 명령어를 입력한다: crash_type_num
에는 1-8 범위의 숫자가 입력되는데, 이들은 다이얼로그 창에 나열된 시스템 충돌 원인들을 순서에 대응한다. 예를 들어 Stack overflow로 충돌을 일으키려면 숫자 6을 기입한다.
notmyfaultc crash crash_type_num
응답 없음
총 세 가지의 응답 없음 증상을 일으키는 선택지가 있으며, 증상에 대한 설명은 아래 표를 참고한다.
선택지 | 대상 | 증상 |
---|---|---|
Hang with IRP | 드라이버 | myfault.sys 드라이버를 먹통으로 만들어 시스템 충돌도 일으킬 수 없다. |
Hang with DPC | 시스템 | 시스템 자체가 아무런 반응이 없어 강제 종료 혹은 시스템 충돌을 일으켜야 한다. |
Deadlock | 어플리케이션 | 어플리케이션 자체가 아무런 반응이 없으며 프로세스 강제 종료도 되지 않는다. |
시스템 콘솔로 시스템 혹은 드라이버 응답 없음을 일으키려면 아래의 명령어를 입력한다: hang_type_num
에는 Hang with IRP의 1번 그리고 Hang with DPC의 2번만 입력할 수 있다.
notmyfaultc hang hang_type_num
메모리 누수
윈도우는 두 종류의 커널 메모리가 있으며, 이들은 각각 페이징 풀(paged pool)과 비페이징 풀(nonpaged pool)이다.
NotMyFault 프로그램은 둘 중 하나를 초당 원하는 킬로바이트 단위만큼 누수시킬 수 있다. 커널 메모리의 누수로 메모리 풀이 소진되면 시스템은 응답이 없거나 충돌이 발생할 수 있으며, 혹은 어플리케이션이 비정상적으로 종료될 수 있다. 작업 관리자나 성능 모니터로부터 커널 메모리가 증가하는 게 수치적으로 볼 수 있으며, 사용 가능한 메모리가 부족해지면서 시스템 성능이 저하되는 증상을 목격할 수 있다.
만일 고급 시스템 설정의 가상 메모리가 “시스템이 관리하는 크기”로 지정되어 있으면 메모리가 부족함에 따라 커밋된 메모리 용량이 자동으로 늘어나 증상이 다소 늦게 나타난다.