다음과 같은 문제가 발생했습니다. powershell을 통해 원격 연결을 여는 연속 루프에서 실행되는 응용 프로그램이 있습니다(무언가를 수행한 다음 닫음). 이는 Windows 시스템에서는 제대로 작동하지만 Linux 시스템에서는 작동하지 않습니다(에서 테스트됨 Ubuntu 16.0.4
).
문제를 재현하려면 다음 스크립트를 사용하십시오.
$i = 0
while ($i -le 200)
{
$password = "myPassword"
$domain = "domain\computerName"
$computerName = "xxx.xxx.xxx.xxx"
$pwSession = convertto-securestring -AsPlainText -Force $password
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $domain,$pwSession
$session = new-pssession -computername $computerName -credential $cred -Authentication Negotiate
Remove-PSSession -Session $session
Get-PSSession
sleep 3
$i
$i++
}
- 다음을 실행하여 powershell 컨텍스트를 입력하세요.
pwsh
- 위 스크립트 실행(복사+붙여넣기)
- pwsh 프로세스 ID에서 실행
top -p {process id}
(다음 명령을 사용하여 한 단계로 실행할 수 있음)top -p $(ps -aux | grep pwsh | head -n 1 | cut -d' ' -f5)
이런 창이 보이실 겁니다
메모리 소비가 계속해서 무한정(반복당 0.1%씩) 증가한다는 것을 알 수 있습니다.
Google은 powershell을 사용하여 새 세션을 열 때 메모리 누수를 언급하는 몇 가지 기사를 반환했지만 위의 간단한 스크립트가 왜 그러한 문제를 일으키는지에 대한 설명을 찾을 수 없었습니다. 다시 말하지만 Linux에서만 가능합니다.
이 문제를 해결하는 방법에 대한 아이디어가 있습니까?