
그래서 내 시스템이 DOS로 실행되고 있거나 방금 아주 큰 파일(openstreetmaps planet.osm)을 열었습니다. 시스템이 완전히 응답하지 않게 됩니다... 너무 응답하지 않아서 쉘에 들어가서 맨 위로 실행하고 문제가 있는 프로세스를 종료하는 데 약 10분이 걸립니다. 이제 재설정 버튼을 누를 준비가 되었습니다.
질문: 내 시스템이 고정되어도 여전히 2%의 CPU(2ghz 시스템 ~ 40MHz! - 쉘에 충분해야 합니까?)를 갖도록 특정 최소량의 시스템 리소스를 따로 설정하는 것이 가능합니까? 제 말은 작동했습니다. 90년대 초반) 어딘가에 따로 보관해 두셨나요? 아니면 문제가 있는 프로세스를 제한하는 방법이 있나요?
전체 성능이 10% 저하되더라도 시스템을 계속 사용할 수 있도록 OS가 런어웨이 프로세스를 제한하기를 바라는 상황이 발생합니다. 완전히 무력해지는 대신 이런 상황에서 행동할 수 있는 능력이 있다면... 좋을 것 같아요.
답변1
"좋다"고 말하는 게 웃기네요. 한 가지 해결책은 문제가 되는 프로세스를 "거부"하여 CPU를 낭비하지 않도록 하는 것입니다(본질적으로 앱의 우선 순위를 낮추는 것).
우선순위가 낮은 프로세스를 시작하려면:
nice <program> &
실행 중인 프로세스의 우선순위를 변경하려면 다음을 수행하십시오.
renice 4 <program>
우선순위의 범위는 -20에서 20까지입니다. 0은 기본값이고, 20은 가장 낮은 우선순위, -20은 가장 높은 우선순위입니다.
답변2
tty0 또는 ttyS0 또는 우선 순위 루트 로그인을 원하는 곳 어디에서나 실행 중인 프로세스를 찾는 스크립트를 작성하고 해당 프로세스를 실시간 예약 우선 순위로 설정할 수 있습니다. 스크립트 자체는 실시간 우선순위로 시작되어야 합니다.
스왑 폭풍 중에 메모리에 액세스하는 것은 더 어려운 작업입니다. Linux cgroup을 사용할 수 있습니다. 스크립트 대신 C로 프로그램을 작성하고 mlockall을 사용하여 메모리를 RAM에 잠글 수 있습니다. 그런 다음 해당 프로그램은 ptrace를 사용하여 다른 프로세스를 찌르고 mlockall을 호출하도록 강제할 수 있습니다. 이를 사용하여 스왑의 영향을 받지 않는 bash 쉘을 얻을 수 있습니다.
당신이 프로그래머이거나 이미 이 글을 작성한 사람을 찾을 수 없다면(저는 작성하지 않았습니다) cgroup이 우선 순위가 높은 메모리를 예약하는 더 쉬운 방법일 것입니다.