작업 관리자에는 CPU 3%로만 보이던 프로그램 하나를 끄자 CPU 온도가 약 10도 내려갔습니다. 범인은 LG 모니터용 프로그램 OnScreen Control에 딸린 OSCApplicationManager.exe였고, 부팅한 뒤 약 31시간 반 동안 CPU 코어 하나를 100%로 붙잡고 있었습니다. 바이러스는 아니었습니다. 정상 서명이 붙은 LG 정품 파일이 헛돌고 있었습니다.
아래 수치는 2026년 10월 7일 Windows 11 PC 한 대(AMD 라이젠 9 5950X, 16코어 32스레드)에서 OnScreen Control 9.43.0.0으로 직접 잰 값입니다. 온도 변화는 이 PC의 모니터링 프로그램 표시 기준이고, PC마다 숫자는 다릅니다. 점검 순서는 그대로 쓸 수 있습니다.
증상: 아무것도 안 하는데 CPU가 뜨겁다
- PC가 느려서 프로세스를 훑어보다가 발견했습니다. 정작 느려진 원인은 따로 있었고(하드디스크 사용률 100%), 이 문제는 덤으로 나왔습니다.
- 전체 CPU 사용률은 10~19%로 한가했습니다.
- 작업 관리자에서 LG 관련 항목은 0~3%로만 보여서 눈에 띄지 않았습니다.
왜 작업 관리자는 3%라고 할까
작업 관리자의 CPU %는 논리 프로세서 전체를 100으로 놓고 계산합니다. 32스레드 CPU에서 프로그램 하나가 코어 하나를 꽉 채우면 100 ÷ 32 = 약 3.1%로 표시됩니다. 8스레드 CPU라면 같은 상황이 12.5%로 보입니다. 코어가 많을수록 "헛도는 프로그램 하나"가 숫자에 묻힙니다.
| 재는 기준 | OSCApplicationManager |
|---|---|
| 작업 관리자 표시(32스레드 전체 기준) | 3.1~3.2% |
| 코어 하나 기준 | 99~107% |
| 부팅 후 약 31시간 반 동안 쓴 CPU 시간 | 116,309초(약 32시간) |
| 읽기 호출 | 초당 약 140만 회, 읽은 양 0바이트 |
쓴 CPU 시간이 켜져 있던 시간보다 깁니다. 켜진 내내 코어 하나를 한 번도 놓지 않았다는 뜻입니다.
코어 하나를 꽉 채운 프로그램 찾기
작업 관리자의 % 대신 "5초 동안 CPU 시간을 얼마나 썼는지"를 직접 재면 바로 드러납니다. PowerShell에 붙여 넣으면 됩니다. 관리자 권한은 필요 없습니다.
$n = (Get-CimInstance Win32_ComputerSystem).NumberOfLogicalProcessors
$a = @{}; Get-Process | ForEach-Object { $a[$_.Id] = $_.CPU }
Start-Sleep 5
Get-Process | Where-Object { $a.ContainsKey($_.Id) -and $_.CPU } | ForEach-Object {
[pscustomobject]@{
Name = $_.ProcessName
Id = $_.Id
OneCorePct = [math]::Round(($_.CPU - $a[$_.Id]) / 5 * 100)
TaskMgrPct = [math]::Round(($_.CPU - $a[$_.Id]) / 5 / $n * 100, 1)
}
} | Sort-Object OneCorePct -Descending | Select-Object -First 5
OneCorePct가 100 근처에서 계속 머무는 프로세스가 있으면 그것이 코어 하나를 붙잡고 있는 것입니다. TaskMgrPct는 같은 값을 작업 관리자 방식으로 환산한 숫자입니다. 한 번만 재지 말고 두세 번 재서 계속 100 근처인지 확인합니다. 잠깐 일하는 프로그램과 헛도는 프로그램은 여기서 갈립니다.
작업 관리자에서는 어느 줄일까
OnScreen Control은 프로세스 세 개로 돌고, 작업 관리자에 보이는 이름이 파일 이름과 다릅니다. 저도 처음에 엉뚱한 줄을 보고 "0.1%인데?" 했습니다.
| 작업 관리자에 보이는 이름 | 실제 파일 | 이 PC에서 잰 CPU |
|---|---|---|
| OnScreen Control Control Service | OnScreenControlControlService.exe | 0% |
| OnScreenApplication(32비트) | OnScreen Control.exe | 0% |
| OSCApplicationManager(32비트) | OSCApplicationManager.exe | 3.1~3.2%(코어 하나 100%) |
앞의 두 줄만 보면 멀쩡해 보입니다. OSC로 시작하는 줄을 찾아야 합니다.
3%인데 왜 10도나 차이 날까
- CPU 온도는 평균이 아닙니다. 모니터링 프로그램이 보여 주는 CPU 온도는 보통 가장 뜨거운 지점 기준입니다. 코어 31개가 쉬어도 한 개가 달궈지면 그 온도가 표시됩니다.
- 일이 한 코어에 몰리면 그 코어가 최고 속도로 올라갑니다. 라이젠 9 5950X는 최대 부스트 클럭이 4.9GHz입니다. 부하가 적은 코어 수에 몰릴수록 클럭과 전압을 높게 쓰고, 좁은 면적에 열이 집중됩니다.
- CPU가 쉬는 상태로 못 들어갑니다. 할 일이 없으면 코어는 전력을 낮추고 잠드는데, 한 코어가 쉬지 않고 돌면 그만큼 계속 열이 납니다.
그래서 "전체 사용률 3%"는 일의 양으로는 작아도, 열로는 "코어 하나를 하루 넘게 최고 속도로 돌린 것"이었습니다.
바이러스가 정상 프로그램인 척하는 건 아닐까
이름이 낯설고 CPU를 계속 쓰면 의심부터 듭니다. 세 가지를 확인했습니다.
Get-AuthenticodeSignature 'C:\Program Files (x86)\LG Electronics\OnScreen Control\bin\OSCApplicationManager.exe' |
Format-List Status, SignerCertificate
- 디지털 서명:
Status가Valid이고 서명자가 LG Electronics Inc., 발급자가 DigiCert였습니다. 같은 폴더의 실행 파일 13개가 모두 같은 서명이었습니다. 확인 명령은 Get-AuthenticodeSignature입니다. - 위치와 설치 기록: 정식 설치 폴더에 있었고, 프로그램 목록의 OnScreen Control 9.43.0.0 설치 날짜와 맞았습니다.
- 네트워크: 이 프로세스가 연 TCP·UDP 연결이 하나도 없었습니다.
위장한 악성 파일이라면 서명이 없거나 서명자가 다르고, 대개 엉뚱한 폴더에 있습니다. 이 경우는 정품 프로그램의 오동작이었습니다.
왜 헛돌았을까(추정)
여기부터는 관측에 근거한 추정입니다. 이 프로세스는 초당 약 140만 번 읽기를 시도했는데 실제로 읽은 양은 0바이트였습니다. 올 데이터가 없는데 쉬지 않고 계속 물어보는 대기 루프입니다. 그리고 이 프로세스를 처음 띄운 부모 프로세스는 이미 종료돼 있었습니다. 부모와 주고받던 통로가 끊겼는데 그것을 알아채지 못하고 계속 읽으려 한 것으로 보입니다. 재부팅할 때마다 그러는지, 이번만 그랬는지는 확인하지 못했습니다.
해결
- 일단 종료: 작업 관리자에서 OSCApplicationManager를 선택해 작업 끝내기를 누르거나, PowerShell에서
Stop-Process -Name OSCApplicationManager를 실행합니다. 모니터 화면은 그대로 나옵니다. 화면 분할, 앱별 화면 설정 같은 OnScreen Control 기능만 멈춥니다. - 다시 뜨는 것 막기: 재부팅하면 다시 실행됩니다. 이 PC에서는 시작 프로그램에
OnScreenStartUpApp.exe가, 서비스에 OnScreen Control Control Service(자동)가 등록돼 있었습니다. 기능을 안 쓴다면 작업 관리자의 시작 앱 탭에서 OnScreen Control 항목을 사용 안 함으로 바꾸거나 프로그램을 제거합니다. - 기능을 계속 쓴다면: 재부팅한 뒤 위 스크립트로 다시 재 봅니다. 또 100%에 붙어 있으면 최신 버전으로 다시 설치해 보고, 그래도 같으면 필요할 때만 켜는 편이 낫습니다.
확인: 끄고 나서
- LG 관련 프로세스가 모두 사라졌고 전체 CPU 사용률은 10%였습니다.
- CPU 온도가 약 10도 내려갔습니다. 항상 켜져 있으니 식을 틈이 없어 열이 나고 온도가 높아 팬도 계속 돌고
- 모니터 표시에는 변화가 없었습니다.
정리
- 코어가 많은 CPU에서는 헛도는 프로그램 하나가 작업 관리자에 3% 안팎으로만 보입니다.
- 아무것도 안 하는데 CPU가 뜨거우면 전체 %가 아니라 "코어 하나를 꽉 채운 프로세스"를 찾습니다.
- 낯선 프로세스는 서명, 위치, 네트워크 연결을 확인하면 정품의 오동작인지 위장 파일인지 가를 수 있습니다.
- LG 모니터를 쓰고 OnScreen Control이 깔려 있다면 OSCApplicationManager를 한 번 재 볼 만합니다.