내가 사용해 본 모든 Linux에서 프로그램이 실제로 I/O 바인딩되어 있는데 왜 시스템이 작동을 멈추나요? gcc
이것은 내가 (실수로) (유효한!) 50Mb C 파일을 컴파일하려고 시도했을 때 발생했습니다. GCC의 I/O는 매우 집중적이어서 시스템 충돌을 유발합니다.
또 다른 순간은 apt-get
패키지를 다운로드하는 중이거나 동시에 인터넷에 액세스할 수 없어 모든 요청이 시간 초과되는 경우입니다.
Windows에서는 작업이 작동하지 않을 수 있습니다.저것빠르지만 최소한 I/O 시간을 프로세스 간에 공유할 수 있습니다.
디자인 결정 때문인가요? 그렇다면 이 동작을 변경할 수 있나요?
(이것을 리눅스에 대한 비판으로 받아들이지 마십시오.)
답변1
죄송합니다. 이 질문은 너무 광범위하여 답변할 수 없습니다. 여기서는 구체적인 문제만 실제로 다룰 수 있습니다. 이런 일이 발생하는 데에는 여러 가지 이유가 있습니다. 사용자는 성능 저하를 단순히 오해하는 경우가 많습니다.
- 시스템에 메모리가 부족합니까?
- 하드 드라이브가 느린가요?
- 시스템 설정이 최적이 아닌가요?
단순히 귀하의 질문을 무시하는 것이 아니라 제가 경력을 쌓으면서 꽤 많은 벤치마킹을 해왔는데, 소위 성능 문제를 구체적인 문제로 분해하면 항상 이유가 있고, 일단 문제를 분해하면 일반적으로 개별 부분으로 분명합니다.
이 "문제"를 더욱 디버깅하려면 소매를 걷어붙이고 더 깊이 파고들어야 합니다.
- 이 이벤트 동안 시스템의 나머지 부분이 무엇을 하고 있었는지 확인합니다.
- 사용 가능한 RAM이 충분합니까?
- 스왑을 사용하고 있습니까?
- 시스템의 제한된 리소스를 놓고 경쟁하는 다른 프로세스가 있습니까?
- 실제로 "느린" 실행 프로세스의 타이밍을 정하고 인지된 런타임 차이를 비교합니다.
- 내 프로세스에서는 어떤 리소스를 사용하려고 합니까? 하드 디스크? 메모리? 얼마나?
목록은 계속 이어질 수 있지만 문제에 대한 해결책을 결정하기 전에 이러한 유형의 사항을 진단해야 합니다.