> 백엔드 개발 > Golang > 연결 급증 후 1.3 릴리스 서버 메모리가 시스템으로 돌아가지 않는 이유는 무엇입니까?

연결 급증 후 1.3 릴리스 서버 메모리가 시스템으로 돌아가지 않는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-30 06:38:09
원래의
281명이 탐색했습니다.

Why Doesn't Go 1.3 Release Server Memory Back to the System After a Connection Spike?

Go 1.3 가비지 수집기가 서버 메모리를 시스템에 다시 해제하지 않음

메모리 사용량을 조사하기 위해 개발된 서버에서 예상되는 메모리 출시에도 불구하고 RES 메모리가 변동하는 것으로 나타났습니다. 연결이 급증한 후. 이 문제는 힙 메모리를 즉시 해제하는 Go 가비지 수집기의 제한과 OS에 대한 고루틴 스택 메모리에 액세스할 수 없기 때문에 발생합니다. 사용되지 않은 힙 부분을 해제하기 위해 Unix 계열 시스템에서 사용할 수 있는 시스템 호출은 Windows에서 사용할 수 없으므로 가상 메모리 소비가 더 커질 수 있습니다.

처음에 서버는 작은 메모리 각인으로 시작됩니다. 10,000개 연결의 초기 펄스 동안 메모리 사용량은 약 60MB까지 증가합니다("상단"의 RES 크기로 표시됨). 펄스가 끝나면 메모리 사용량이 감소합니다. 그러나 RES 크기는 56MB로 계속 높아지는 반면 사용 중인 메모리는 60MB 아래로 떨어지지 않습니다.

Go 가비지 수집기가 힙 메모리를 해제하는 동안 시스템에 즉시 반환하지 않습니다. 이 프로세스는 GC 스윕 후 최대 7분이 걸릴 수 있습니다. 또한, 고루틴 스택에 할당된 메모리는 OS에 절대 해제되지 않습니다. 이로 인해 서버에서 지속적으로 높은 메모리 소비가 관찰됩니다.

안타깝게도 Go 버전 1.3에는 이 문제에 대한 명확한 해결책이 없습니다. 그러나 후속 릴리스에서는 상황이 개선될 것으로 예상됩니다. 영향을 완화하려면 다음 조치를 고려하십시오.

  • runtime.GC()를 사용하여 주기적으로 가비지 수집을 강제합니다.
  • 서버가 허용할 수 있는 연결 수에 제한을 설정하여 방지합니다. 과도한 메모리 사용량.

위 내용은 연결 급증 후 1.3 릴리스 서버 메모리가 시스템으로 돌아가지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿