Go 1.3 가비지 수집기가 서버 메모리를 시스템에 다시 해제하지 않음
메모리 사용량을 조사하기 위해 개발된 서버에서 예상되는 메모리 출시에도 불구하고 RES 메모리가 변동하는 것으로 나타났습니다. 연결이 급증한 후. 이 문제는 힙 메모리를 즉시 해제하는 Go 가비지 수집기의 제한과 OS에 대한 고루틴 스택 메모리에 액세스할 수 없기 때문에 발생합니다. 사용되지 않은 힙 부분을 해제하기 위해 Unix 계열 시스템에서 사용할 수 있는 시스템 호출은 Windows에서 사용할 수 없으므로 가상 메모리 소비가 더 커질 수 있습니다.
처음에 서버는 작은 메모리 각인으로 시작됩니다. 10,000개 연결의 초기 펄스 동안 메모리 사용량은 약 60MB까지 증가합니다("상단"의 RES 크기로 표시됨). 펄스가 끝나면 메모리 사용량이 감소합니다. 그러나 RES 크기는 56MB로 계속 높아지는 반면 사용 중인 메모리는 60MB 아래로 떨어지지 않습니다.
Go 가비지 수집기가 힙 메모리를 해제하는 동안 시스템에 즉시 반환하지 않습니다. 이 프로세스는 GC 스윕 후 최대 7분이 걸릴 수 있습니다. 또한, 고루틴 스택에 할당된 메모리는 OS에 절대 해제되지 않습니다. 이로 인해 서버에서 지속적으로 높은 메모리 소비가 관찰됩니다.
안타깝게도 Go 버전 1.3에는 이 문제에 대한 명확한 해결책이 없습니다. 그러나 후속 릴리스에서는 상황이 개선될 것으로 예상됩니다. 영향을 완화하려면 다음 조치를 고려하십시오.
위 내용은 연결 급증 후 1.3 릴리스 서버 메모리가 시스템으로 돌아가지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!