Asp.net ์ฝ์ด๊ฐ ์ฐ๋ ๊ธฐ๋ฅผ ์์งํ์ง ์๋ ์ด์ ๋ฅผ ์ดํดํ ์ ์์ต๋๋ค. ์ง๋ ์ฃผ์ ์น ์๋น์ค๋ฅผ ๋ฉฐ์น ๋์ ์คํํ๋๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด 20GB์ ๋๋ฌํ์ต๋๋ค. GC๊ฐ ์ ๋๋ก ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ ํ ์คํธํ๊ธฐ ์ํด ๋ง์ ๋ฌธ์์ด ๋ชจ์์ ๋ฐํํ๋ ๋งค์ฐ ๊ฐ๋จํ ์น ๋ฉ์๋๋ฅผ ์์ฑํ์ต๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ 124MB๋ง ์ฌ์ฉํ์ฌ ์์ํ์ง๋ง ์น ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด 411MB์ ๋๋ฌํ ๋๊น์ง ๊ณ์ ๋์์ก์ต๋๋ค. ์น ๋ฉ์๋๋ฅผ ๊ณ์ ํธ์ถํ๋ค๋ฉด ๋ ๋์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ํ ์คํธ๋ฅผ ์ค๋จํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋ด ํ ์คํธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
`
[HttpGet]
๊ณต๊ฐ ๋น๋๊ธฐ ์์> ํ ์คํธGC() {
const ๋ฌธ์์ด ๋ฉ์์ง = "ํ ์คํธ";
๋ฐํ Enumerable.Repeat(๋ฉ์์ง, 100000000);
}
`
๋ด๊ฐ ๊ฐ๊ณผํ๊ณ ์๋ ๊ฒ์ด ์์ ์ ์์ง๋ง... ๋ด๊ฐ ์ดํดํ๊ธฐ๋ก๋ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํด์๋ ์ ๋ฉ๋๋ค. ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด UI๋ก ์ ์ก๋ ํ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ด์ผ ํฉ๋๋ค.
์๋ ์คํฌ๋ฆฐ์ท์์ ๋ณผ ์ ์๋ฏ์ด GC๊ฐ ํธ์ถ๋ ํ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ง ์์์ต๋๋ค.
๋์ ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค!
์ด์น
@rynowak
๋ด๊ฐ ๊ฐ๊ณผํ๊ณ ์๋ ๊ฒ์ด ์์ ์ ์์ง๋ง... ๋ด๊ฐ ์ดํดํ๊ธฐ๋ก๋ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํด์๋ ์ ๋ฉ๋๋ค. ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด UI๋ก ์ ์ก๋ ํ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ด์ผ ํฉ๋๋ค.
ํฐ ๊ฐ์ฒด ํ์ ์ฌ๊ธฐ์์ ๋น์ ์ ๋ฌผ๊ณ ์์ ๊ฒ์ ๋๋ค. ํฌ๊ธฐ๊ฐ 85KB๋ณด๋ค ํฐ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ฉด LOH์ ์ ์ฅ๋๊ณ ๋งค์ฐ ๋๋ฌผ๊ฒ ์์ถ ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ http://stackoverflow.com/questions/8951836/why-large-object-heap-and-why-do-we-care ๋ฅผ ์ฐธ์กฐํ์ญ์์ค(๋๋ https://github.com/dotnet/coreclr/blob/master /Documentation/botr/garbage-collection.md#design-of-allocator๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Asp.net ์ฝ์ด๊ฐ ์ฐ๋ ๊ธฐ๋ฅผ ์์งํ์ง ์๋ ์ด์ ๋ฅผ ์ดํดํ ์ ์์ต๋๋ค. ์ง๋ ์ฃผ์ ์น ์๋น์ค๋ฅผ ๋ฉฐ์น ๋์ ์คํํ๋๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด 20GB์ ๋๋ฌํ์ต๋๋ค.
๊ทธ๋ ๊ฒ ํฐ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์๋น์ค๋ ๋ฌด์์ ๋๊น? ๋ฉ๋ชจ๋ฆฌ ๋คํ๊ฐ ๋๋ฌด ์ปค์ง๊ธฐ ์ ์ ์๋ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฃผ๋ณ์ ๋ถ์ด ์๋ ๊ฐ์ฒด์ ์ ์ง๋๋ ์ด์ ๋ฅผ ๋ช ํํ๊ฒ ์ ์ ์์ต๋๋ค(Visual Studio๋ฅผ ์ฌ์ฉํ์ฌ ๋คํ ๋๋ windbg ๋๋ perfview์ ๊ฐ์ ๊ณ ๊ธ ๋๊ตฌ๋ฅผ ๋ณผ ์ ์์).
Enumerable.Repeat๋ฅผ ํธ์ถํ๋ ๋์ ์ฒ์๋ถํฐ ๋ฐฐ์ด์ ํ ๋นํ์ญ์์ค.
๋๋ GCSettings.LargeObjectHeapCompactionMode(.Net Standard์์ ์ง์)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ถํฉ๋๋ค.
๋ต์ฅ์ ๋ณด๋ด ์ฃผ์ @davidfowl ๊ณผ @MhAllan ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ ์ด ์๋ ์ธ์์ ์ธ ๊ฒ์ด์์ต๋๋ค. ๋๋ ์คํฌ๋ฆฐ์ท์ ์ฐ์ ์ ์๋๋ก ๋์ ๋๋ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ํ์ต๋๋ค. ์ง์ค์ ๋ฌธ์ ์ ๊ฐ์ฒด์ ํฌ๊ธฐ์ ๊ด๊ณ์์ด ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ด๋ฌํ ์ผ์ด ๋ฐ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทํ์ ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํด @davidfowl , ๋ด ์๋น์ค๋ dapper๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๊ฒฐ๊ณผ ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ต๋๋ค. ๊ฐ ํธ์ถ์ ๋ํ ํ ํ์ ๋ฐ์ดํฐ์์ต๋๋ค. ๊ทธ๋์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๋งํผ ์ปค์ง๋ ๋ฐ ๋ฉฐ์น ์ด ๊ฑธ๋ ธ์ต๋๋ค. ์ด ํน์ฑ์ ๋ฐ๊ฒฌํ์ ๋ ์ค์ ๋ก DB๋ฅผ ํ ์คํธํ๋ ค๊ณ ํ์ต๋๋ค. ๋๋ ๊ณ์ํด์ ๋ฉ์๋๋ฅผ ๊ณ์ ํธ์ถํ๋ ์์ ์ฝ์ ์ฑ์ ์์ฑํ์ต๋๋ค.
@zorthgo ํ์คํ Dapper๊ฐ ์๋๊ฐ์? PHP์์์ ๊ฐ์ด SQL ์คํฌ๋ฆฝํธ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ์ฃผ์
ํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ฉด ์บ์๋ SQL ์คํฌ๋ฆฝํธ๊ฐ ๋ง์ด ๋จ๊ฒ ๋ฉ๋๋ค. Dapper๊ฐ ํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://github.com/StackExchange/Dapper/blob/fe5c270aceab362c936456087a830e6fe1603cac/Dapper/SqlMapper.cs
๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์งํ๋ ๋์์ ์๋ ค์ผ ํฉ๋๋ค. Visual Studio 2017์ ์ฑ์ ์ฌ๋ฌ ๋ฒ ํธ์ถํ๊ธฐ ์ ๊ณผ ํ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ผ๋ถ ์ค๋
์ท์ ์ฐ๊ณ ๋น๊ตํ ์ ์๋๋ก ๋์์ค ์ ์์ด์ผ ํฉ๋๋ค.
@zorthgo ๋ค ์ ๋ ๋ดค์ต๋๋ค. ๋ด .net ์ฝ์ด ์ฝ์ ์ฑ์์ servicestack์ ์ฌ์ฉํ๊ณ ์์๊ณ API๋ฅผ ํธ์ถํ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด 50MB ์ฆ๊ฐํ์ต๋๋ค. VS2017 ๋ฒ๊ทธ์ธ ์ค ์์๋๋ฐ ์์ ๊ด๋ฆฌ์์์ ์ฌ์ฉ๋์ด ๋ง์ ๊ฒ์ ํ์ธํ์ต๋๋ค. zorthgo๊ฐ api์ ๋ํ ๊ฐ๋จํ ํธ์ถ์ ํตํด ์ธ๊ธํ๋ฏ์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํฌ๊ฒ ์ฆ๊ฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ .NET Core์ ASP.NET Core์์๋ง ๋ฐ์ํฉ๋๊น ์๋๋ฉด .NET Framework์ ASP.NET Core์๋ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
MVC 5(System.Web์์)๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๊ณ ๋์ผํ ๋์์ด ํ์๋์ง ์๋์ง ํ์ธํ ์ ์์ต๋๊น?
ํ์ฌ ์ํ๋ก๋ ์ด ๋ฌธ์ ๋ฅผ ์ง์ ์ํฌ ์ ์์ต๋๋ค.
์ ๊ฒฝ์ฐ์๋ ๋์ ํ๋ ์์ํฌ .NetCoreApp 1.1๋ง ์ฌ์ฉํ๊ณ ์์๊ณ ์ฝ์ ์ฑ์ ๊ณต์ ํ๋ก์ ํธ์ ๊ฐ์ฒด ๋ชจ๋ธ์ ์ฐธ์กฐํ๊ณ ์์์ต๋๋ค.
์ด๊ฒ์ด ๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋ ์ง ํ์คํ์ง ์์ต๋๋ค. hellorequest๋ฅผ ํธ์ถํ๋ ์ํ ์ฑ. ์ด ์ฑ์์ ์์ ๋ฉ๋ชจ๋ฆฌ๋ 85mb์ด๊ณ ๋ฐ๋ณต์ ์ธ ์์ฒญ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ฝ 145mb๊น์ง ์ฌ๋ฆด ์ ์์์ต๋๋ค. ๋๋๋ก 125mb๋ก ๋จ์ด์ง์ง๋ง ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค. .Net Core ์ฝ์ ์ฑ์ ์ต์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ ์์ ์ธ ๋์์ธ์ง ํ์คํ์ง ์์ต๋๋ค. ๋๋ ํญ์ ๋ด๊ฐ ๋ญ๊ฐ ์๋ชปํ๊ณ ์๊ฑฐ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ธ์คํด์คํํ์ง ์๋๋ค๊ณ ๊ฐ์ ํ์ต๋๋ค.
https://drive.google.com/open?id=0B0Gm-m-z_U84TU5keWFTMzc1ZWc
3000-5000๋ช ์ ํ์ฑ ์ฌ์ฉ์๊ฐ ์๋ ํ๋ก๋์ ์ ๋ฐฐํฌ๋ Asp.Net Core ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค. ์ด์ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ 15GB๋ก ์ฆ๊ฐํ์ต๋๋ค. ์ฌ์ ํ 3์๊ฐ๋ง๋ค AppPool์ ์ฌํ์ฉํ๋๋ก IIS๋ฅผ ๊ตฌ์ฑํด์ผ ํ์ต๋๋ค. ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ์์ ๋ด๋ ค๊ณ ๋ ธ๋ ฅํ์ญ์์ค.
๋๊ตฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ๊ฐ์ ธ ์์ ํน์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ํ์ธ ํ์ต๋๊น?
@davidfowl @Pinox
์ ๋ ํฐ ํ์ฌ์์ ์ผํ๊ณ ์๊ณ ASP.NET Core๋ก ์ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ณ ์ถ์ต๋๋ค. ํ์ง๋ง ์ด ๋ฌธ์ ๋ฅผ ๋ดค์ ๋ ์ ๋ ๋๋ ค์ ์ต๋๋ค. ์ด๊ฒ์ ์ค์ํ ๋ฌธ์ ์ด๋ฉฐ ํ๋ก์ ํธ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ฐจ๋จํ ์ ์์ต๋๋ค.
ASP.NET Core ๋๋ .NET Core(CoreCLR)์ ๊ด๋ จ์ด ์์ต๋๊น? ์ฐ๋ฆฌ๋ Full .NET(4.6)์ ๋์์ผ๋ก ํ ๊ฒ์ด๋ฏ๋ก ์ง๋ฌธํ๋ ๊ฒ์ ๋๋ค.
์ ๊ฒฝ์ฐ์๋ @ikourfaln .net ์ฝ์ด ์ฝ์ ์ฑ, servicestack(.net ์ฝ์ด ๋ฒ์ ) ๋ฐ kestrel์ ์ฌ์ฉํ์ต๋๋ค. ์ด์ํ ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํ ์์ค๊น์ง ์ฌ๋ผ๊ฐ๋ค๊ฐ ๊ฐ์๊ธฐ ๋ฉ์ถ๊ณ ๋ค์ ์ฌ๋ผ๊ฐ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์์ ์ํ๋ก ์ธก๋ฉด์์ ํ ์คํธํ๊ณ ๋์์ ํ์ธํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์๋ง๋ @zorthgo ๋ ๊ทธ ๋ฉ๋ชจ๋ฆฌ์์ ๋น์ทํ ํ๋์ด ํน์ ์์ค๊น์ง ์ฌ์ฉ๋ ๋ค์ ๋ด๊ฐ ๋ณด๊ณ ์๋ ํ๋์ด๋ฏ๋ก ์ฆ๊ฐ๋ฅผ ๋ฉ์ถ๋ค๋ฉด ๊ทธ์ ํธ์์ ํ์ธํ ์ ์์ต๋๋ค. @zorthgo ์์ ๋ฅผ ํฌํจํ๋๋ก ์ํ ์ฑ์ ์ ๋ฐ์ดํธํ๋๋ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ๋ผ์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ฌ๋ผ๊ฐ์ง๋ง ๊ฒฐ๊ตญ ๋ฉ์ถฅ๋๋ค.
์์ค๋ฅผ ์ฝ๊ฐ ๋ณ๊ฒฝํ์ต๋๋ค.
๊ณต์ฉ ๊ฐ์ฒด Any(TestGC ์์ฒญ)
{
const ๋ฌธ์์ด ๋ฉ์์ง = "ํ
์คํธ";
๋ฐํ Enumerable.Repeat(๋ฉ์์ง, 100000);
}
@ํผ๋
น์ค
๊ฐ์ฌํฉ๋๋ค. ์์์ ํ๋์ ํ์ธํ๊ฒ ์ต๋๋ค.
2.0์ ์ด ๋ฒ๊ทธ๋ ์ด๋ป์ต๋๊น?
์ด๊ฒ์ ๋ํ ์์์ด ์์ต๋๊น? ๋๋ Net Framework๋ฅผ ํตํด Core 2๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ ์ด๊ฒ์ ์ฌ์ ํ โโโโ๋ฐ์ํฉ๋๋ค. _Controller_๋ฅผ ํธ์ถํ ๋๋ง๋ค ์ฌ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฆ๊ฐํ์ง๋ง ๊ฒฐ์ฝ ์ค์ด๋ค์ง ์์์ต๋๋ค. (_WebApi ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ต๋๋ค_)
์๋ ,
ASP.NET Core 2์์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ๊ฐ์ ธ์ ๋ถ์์ ์๋ํ์ต๋๋ค. ๋ด๊ฐ ๋ณผ ๋ ๋ฌธ์ ๋ OP๊ฐ ๋งํ ๊ฒ๊ณผ ์ ํํ ๊ฐ์ต๋๋ค. ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฝ 75MB ํ ๋น์ผ๋ก ์์ํ์ฌ ๋งค์ฐ ๋น ๋ฅด๊ฒ ~750MB๊น์ง ์ด๋ํฉ๋๋ค. ๊ทธ ์ค 608MB๋ ".NET์ ํ ๋น๋ ๋ฏธ์ฌ์ฉ ๋ฉ๋ชจ๋ฆฌ"์ ๋๋ค.
์ฑ ์์ ์ ์ฒซ ๋ฒ์งธ ์ค๋
์ท:
3๋ถ ๋ฐ 100๊ฐ ์์ฒญ ํ ๋ ๋ฒ์งธ ์ค๋
์ท:
์ฐ๋ฆฌ๋ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํด ์์ต๋๋ค. ์ปจํธ๋กค๋ฌ๋ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์ต๋๋ค(์ด๋ ์๋ชป๋ ์ค๊ณ์ด๋ฉฐ ๊ณง ๊ต์ฒด๋ ์์ ์). ์ด ์ปจํธ๋กค๋ฌ์ ๋ํ ๊ฐ ํธ์ถ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ 40-50%๋ง ๊ฐ์ํ์ง๋ง(50Mb ์ฆ๊ฐ, 30-35Mb ๊ฐ์) ๊ฐ ํธ์ถ์ ๋งค๋ฒ 10-15Mb ๋ฒ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ์๋น์ค๋ ์๋น์ค ํจ๋ธ๋ฆญ ๋ด๋ถ์์ ํธ์คํ ๋ฉ๋๋ค.
๋ค์ ์กฐํฉ์ ์ฌ์ฉํ์ฌ ํ๋ก๋์ ์๋น์ค(20-100 req/s)์ ๋น์ทํ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์๋ ํ๋ฐํธ ์๋ ์น ์๋ฒ์ ์์ ์๊ฐ ์์ต๋๋ค(์๋ ๊ทธ๋ํ์ ๊ฐ๊ฐ ํ์๋จ).
์น ์๋ฒ(์ต๊ทผ 6์๊ฐ)
์์
์(์ง๋ 6์๊ฐ)
์๋น์ค๊ฐ ๊ฐ์ฒด ์ ์ฅ์ ํ๋ก์๋ก ์๋ํ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ LOH์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ ๋ค ํฐ ๋ฐ์ดํธ ๋ฐฐ์ด์ ์ฌ์ฉํฉ๋๋ค. ์ ์ง๋ฌธ์ ์ด๊ฒ์ด ํ์ฌ .NET Core์ ์๋ ค์ง ์ ํ ์ฌํญ์ ๋๊น? LOH๊ฐ ์์ ํ ์ ๋ฆฌ๋๊ฑฐ๋ ์กฐ๊ฐํ๋์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
๊ทธ๋ ๊ธด ํด๋ SOH๋ ์ผ๋ฐ์ ์ธ ์น API ๊ฐ์ฒด๊ฐ ์ ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ค ์ ์? ๋ด ์ค์ ์ ๋ฌธ์ ๊ฐ ์์ต๋๊น? ์ฝ๋๋ฅผ ๋ถ์ํ์ง๋ง ๋์ ๋๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ฐพ์ ์ ์์ผ๋ฉฐ ServiceStack ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธ๋ถ์์ ํน๋ณํ ๊ฒ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
@sebastienros - ์ด์ ๋ํ ์๊ฐ์ด ์์ต๋๊น? ์์คํ ์์ ์ ์ฌํ ๋์์ ๊ด์ฐฐํ ์ ์ด ์์ต๋๊น?
@sebastienros , ๋ช ๊ฐ์ง ์ง๋ฌธ:
.net core 2.1์ ๊ฒฐ๊ณผ๋ ๋ฌด์์ ๋๊น? Kestrel์ด Span์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๊น?
์ฐ๋ฆฌ๋ ๊ฐ์ธ์ ์ผ๋ก ๋ฌธ์ ๊ฐ Kestrel์ ์๋ค๋ ์ฆ๊ฑฐ๋ฅผ ๋ณด์ง ๋ชปํ์ต๋๋ค. ์ฌ์ ํ ์์ฉ ํ๋ก๊ทธ๋จ ๋ฌธ์ ์ฒ๋ผ ๋ณด์ ๋๋ค.
์ด๋ ์ด๋ฅผ ํ๋งํ ์ ์๋ ๊ฒฝ์ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ๊ณตํ ์ ์์ต๋๊น? GCSettings.LargeObjectHeapCompactionMode.CompactOnce๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น?
@jkotas @Maoni0 ์กฐ์ธ์ด ์์ผ์ ๊ฐ์?
๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ์กฐ์ฌํ ์ ์์ต๋๊น? @sinapis ๊ฐ ์ค๋ช ํ๋ ๊ฒ์ฒ๋ผ redgate ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ฌ์ ๋ฐ๋ฅธ LOH๋ ๊ฑฐ์ ๋น์ด ์์ง๋ง ํ ๋ช ์ ์ฌ์ฉ์์ ๋ํด ์ฌ์ ํ 1GB ์ด์์ ์ฝ๊ฒ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ถ์ ์ ์์งํ๊ณ perfview๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ํฉ๋๋ค. Vance์ ๋ค๋ฅธ ์ฌ๋๋ค์ด .NET ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ถ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ง์ ์์ต์๊ฐ ์์ต๋๋ค. https://www.bing.com/search?q=.NET%20memory%20leak%20perfview .
https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/linux-performance-tracing.md ์๋ ์ถ์ ์์ง์ ์ํ Linux ๊ด๋ จ ์ง์นจ์ด ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๊ณ GC๊ฐ ์ํ๋ ๋งํผ๋ง ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์งํ๊ณ ์๋ค๊ณ ์๊ฐ๋๋ฉด ๋ค์์ ์๋ํ ์ ์์ต๋๋ค.
์๋ ,
ํ๋ก๋์ ์์ .Net Core Web API์ ๊ฐ์ ์ข ๋ฅ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ .Net Core 2.0.3์ด ํฌํจ๋ Windows Server 2016์์ ์คํ๋ฉ๋๋ค. ๋จธ์ ์ 28๊ฐ์ CPU ์ฝ์ด์ 24GB์ RAM์ด ์๋ Hyper-V VM์ ๋๋ค. IIS ์์ฉ ํ๋ก๊ทธ๋จ ํ์ ์ถฉ๋ถํ ์์ฃผ ์ฌํ์ฉํ์ง ์์ผ๋ฉด ๊ฒฐ๊ตญ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ง์ ๋ฉ๋ชจ๋ฆฌ(์ ์ฒด ์์คํ ๋ฉ๋ชจ๋ฆฌ์ >=95%)๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด CPU ์ฌ์ฉ๋๋ ํฌ๊ฒ ์ฆ๊ฐํฉ๋๋ค(๋๋ก๋ 2%์์ 70%๋ก). OOM ์์ธ๊ฐ ๋ฐ์ํ๋์ง ํ์คํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํญ์ ๋ฐ์ํ๊ธฐ ์ ์ ํ์ ์ฌํ์ฉํฉ๋๋ค(๋ด๊ฐ ๋ณธ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ dotnet.exe๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์ 98%์์ต๋๋ค).
".Net Memory Porfiler"(SciTech Software)๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๋์
๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ๋ถ์ํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด ๋ถ์์ด ์ ํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์ฝ 95%๊ฐ "์ค๋ฒํค๋ > ์ฌ์ฉ๋์ง ์์"์ ์์ต๋๋ค. ์ด ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ฌ ํธ์ง๊ธฐ๊ฐ ํฌ๋ผ์์ ์ด ๋ฒ์ฃผ๋ฅผ ์ค๋ช
ํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
_"Overhead->Unused"๋ ๊ด๋ฆฌ๋๋ ํ์ ๋ํด .NET ๋ฐํ์์์ ์ปค๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ์
๋๋ค. ํ์ฌ ์ฌ์ฉ๋์ง ์์ง๋ง ํฅํ ์ธ์คํด์ค ํ ๋น์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ปค๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์งํ ์ง OS์ ํด์ ํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ฐํ์์ด ์ฌ์ฉํ๋ ๋ง์ ๊ท์น์ด ์์ต๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ, ํ ๋น ํจํด, ํ๋ก์ธ์ ์, ์๋ฒ GC ์ฌ์ฉ ์ฌ๋ถ ๋ฑ๊ณผ ๊ฐ์ ์์ธ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค._
@jkotas ์ถ์ฒํด์ฃผ์ ๋ด์ฉ(Windows ์์ ๊ฐ์ฒด ๋ฐ ์ํฌ์คํ ์ด์ GC๋ก ์ ํ)์ ์ ์ฉํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค. ๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ํ๋ก๋์ ๋ฉ๋ชจ๋ฆฌ ๋คํ์์ ๋ค๋ฅธ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ถ์ถํ ์ ์๋์ง ์๋ ค์ฃผ์ญ์์ค.
๊ฐ์ฌ ํด์
@sinapis @ronald7
๋ฌธ์ ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ฑ์ ๊ณต์ ํ ์ ์๋ ์ฌ๋์ด ์์ต๋๊น? ์ฌํํ ์ ์๋ค๋ฉด ์ด์ ๋ฅผ ์ฐพ๊ฑฐ๋ ์ต์ํ ์ผ๋ถ ์ฝ๋๋ฅผ ํ๋์ฉ ์ ๊ฑฐํ๊ณ ์ต์ํ์ ์ฌํ์ ๋ถ๋ฆฌํ ์ ์์ ๊ฒ์
๋๋ค.
@sebastienros ์ฑ์ ๊ณต์ ํ ์ ์์ง๋ง PerfView session + memory dump ์์ ์ธ์
์ ๊ณต์ ํ ์ ์์ต๋๋ค.
์ค๋ช
: ASP.NET Core 2 Web API๊ฐ ์๊ณ 10์ด์ ๊ฑธ์ณ ๋์ผํ ์์ฒญ์ ๋ณด๋ด๋ 200๋ช
์ ์ฌ์ฉ์์ ๋ํ ๋ถํ ํ
์คํธ๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ด 775๊ฐ์ ์์ฒญ์ด ์ฒ๋ฆฌ๋์์ต๋๋ค.
์ด ์ฑ์ ์์ ๊ด๋ฆฌ์์์ ๊ฑฐ์ 1GB ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ผ๋ก ์ ํํ๊ณ ๊ทธ๋๋ก ์ ์ง๋์์ต๋๋ค. ๋คํ๋ฅผ ๋ณด๋ฉด ์ฝ 18MB๋ฅผ ์ ์ ์์ต๋๋ค.
๊ทธ๋์ ์ง๋ฌธ์ ๊ฑฐ์ 1GB๊ฐ ์ด๋๋ก ๊ฐ์ต๋๊น?
@sinapis ๊ฐ์ฌํฉ๋๋ค
์ค๋ช ํ๋ ๋์์ ์๊ธฐ์น ์์ ๊ฒ์ด ์๋๋ฉฐ GC๋ ์ต๋ ๋ถํ์์ ํ์์ ๋ฐ๋ผ ์ผ๋ถ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํด์ ํฉ๋๋ค. GC ์๋ฒ ๋ชจ๋์ด๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ ํด ๊ธฐ๊ฐ์ด ํด์ ๋๊ณ ์ฑ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น์ง ์์ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ์์ฝํ ๋ฉ๋ชจ๋ฆฌ ์์ ์์คํ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๊ทธ๊ฒ์ด ๊ณ์ ์ฆ๊ฐํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ํ์คํ ๋ฌธ์ ๋ฅผ ๋ณด๊ฒ ๋ ๊ฒ์ ๋๋ค. ๋ ์ด์ ์์ฒญ์ ๋ณด๋ด์ง ์๊ณ ์ฑ์ ์คํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ค์ด๋ค ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
๋๋ถ๋ถ์ ์์คํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ชจํ ๋๊น์ง ๋์ผํ ์์ ์ ์คํํ ์ ์์ต๋๊น? ์๋๋ฉด ๊ณ์ํด์ ์ฆ๊ฐํ๋ ๊ฒ์ ๋ณด์ฌ์ค ๋์ผํ ๋ถํ๋ก ์ต์ํ ์ถฉ๋ถํ ๊ธธ๊น์? ๋๋ ์ฌ์ ํ ๋น์ ์ ํ์ฌ ๋คํ๋ฅผ ๋ณผ ๊ฒ์ ๋๋ค.
๋ํ ์์ ์ค๊ณผ ์์ ์ด ๋๋ ๋ ๋คํ๋ฅผ ๊ฐ์ ธ๊ฐ ์ ์์ผ๋ฏ๋ก ์ธ๋ถ ์ฌํญ์ ๋ณผ ์ ์์ต๋๋ค.
์๋ ํ์ธ์ @sebastienros
์ ๊ฐ์ค๋ฝ๊ฒ๋ ์ ๋ ์ฑ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ๊ณต์ ํ ์ ์์ง๋ง ๋๋ฏธ ์ ํ๋ฆฌ์ผ์ด์ (๋์ผํ ์ํคํ ์ฒ ๋ฐ ์ข ์์ฑ ์ฌ์ฉ)์ ๋ง๋ค๊ณ ๋์ผํ ์์คํ ์์ ์คํํ๊ณ ์ด ๋์์ ์ฌํํ ์ ์๋ค๋ฉด ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณต์ ํ๊ฒ ์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋คํ์์ ์ถ์ถํ ์ ์๋ ์ ์ฉํ ์ ๋ณด๊ฐ ์์ผ๋ฉด ์๋ ค์ฃผ์ญ์์ค.
ํ๋์ ํ๋ก๋์ ์๋ฒ์์ GC ๋ชจ๋๋ฅผ _server_์์ _workstation_์ผ๋ก ์ ๋ฐ์ดํธํ์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ณ๊ฒฝ๋๋ฉด ์ง๊ธ๋ถํฐ ๋ช ์๊ฐ ํ์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋ํ ๋ค๋ฅธ ํ ์คํธ๋ฅผ ์ํํ์ต๋๋ค. 4๊ฐ์ ๊ฐ์ ๋จธ์ ์์ ๋ก๋ ๋ฐธ๋ฐ์ ๋ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ณ ์์ต๋๋ค. ๋ก๋ ๋ฐธ๋ฐ์ ํ์์ ๋จธ์ ์ค ํ๋๋ฅผ ์ ๊ฑฐํ ํ์๋ dotnet.exe์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ ์ค์ด๋ค์ง ์๊ณ 30๋ถ์ด ์ง๋๋ ๋์ผํ ์์ค์ ์ ์งํ์ต๋๋ค. (๊ทธ๋ฌ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ ํ โโ๋ช ๊ฐ์ง ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์์์ต๋๋ค. SCOM์ด 30์ด๋ง๋ค ๋๋ฏธ ๋์ ์์ ๋ณด๋ธ ํ๋์ ์์ฒญ). ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ด ์์คํ ์ผ๋ก ๋ฐํ๋์ง ์์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค
@sinapis ETW ์ถ์ ์ ๋ณด์์ต๋๋ค. ๊ทธ๊ฒ์ ๋์๊ฒ ์์๊ป๋ผ์ ๋๋ค. ๋น์ ์ ๋ง์ง๋ง์ผ๋ก ์ ๋๋ 2์ธ๋ GC์์ ๊ฑฐ์ ์ด์๋จ์ง ๋ชปํ์ง๋ง ์ฐ๋ฆฌ๋ ์ฌ์ ํ ๊ทธ๋ ๊ฒ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ปค๋ฐํ ์ํ๋ก ์ ์งํ๊ธฐ๋ก ์ ํํ์ต๋๋ค. ๊ทํ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ๋ก ๋ณด์ ๋๋ค(๋๋ถ๋ถ LOH ํ ๋น์ผ๋ก ์ธํด ๋ฐฑ๊ทธ๋ผ์ด๋ GC๋ง ์ํํ์ต๋๋ค) - ๊ฑฐ๊ธฐ์ ์ผ๋ถ ํ๊ณ ์ค๋ฅ๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค(๋ ๋ค๋ฅธ ๊ฐ๋ฅ์ฑ์ ๋ณด๊ณ ๋ ์ซ์์ ์ค๋ฅ์ด์ง๋ง ์ด๋ฏธ ๊ทธ๋ ๊ฒ ๋ง์ด ์ปค๋ฐํ์์ ํ์ธํ ๊ฒฝ์ฐ ๋ ์์ ๊ฐ๋ฅ์ฑ). ๋์ ๊ณต์ ํ ์ ์๋ ๋ด์ฉ์ ์ฌํํ ์ ์๋ค๋ฉด ํ์์ ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด GC์์ ์ผ๋ถ ๋ก๊น ์ ์ฌ์ฉํ์ฌ ์ฑ์ ์คํํ ์ ์๋ค๋ฉด(๊ทธ๋ ๊ฒ ํ๋ ์ปค๋ฐ์ ์ค ์ ์์) ๊ทธ๊ฒ๋ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
@Maoni0 GC ๋ก๊น
์ ํ์ฑํํ๋ ๋ฐฉ๋ฒ์ ๊ณต์ ํด์ฃผ์ธ์
ํ๊ณ ์ค๋ฅ๋ฅผ ๋ฐ์ฆํ๊ธฐ ์ํด ์ ๊ฐ ์ ๊ณตํ๊ณ ์ถ์ ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๋ฌด์์ ์ด๋ป๊ฒ ์ ๊ณตํด์ผ ํ๋์ง ์๋ ค์ฃผ์ญ์์ค(๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋๋ก perfview์ ์ง์ํ ๊น์?)
๋๋ ์ต์ํ์ ์ฌํ์ ์๋ํ ๊ฒ์ด์ง๋ง ๋ฌธ์ ๊ฐ ์ด๋์ ์๋์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ฑ๊ณตํ ์ง ํ์ ํ ์ ์์ต๋๋ค.
@sebastienros ๋ฐ๋ผ๊ฑด๋ ๋๋ ์ค๋ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ก ๋ ๋ค๋ฅธ ๋คํ๋ฅผ ์ ๊ณตํ ๊ฒ์ ๋๋ค
์๋ ํ์ธ์ @sebastienros @Maoni0 ,
12์๊ฐ ๋์ ์ํฌ์คํ ์ด์ GC ๋ชจ๋๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ์ง๋ง ๊ฒฐ๊ณผ๋ ๋์ผํ์ต๋๋ค. ๋ํ ๋จ์ผ ํ๋ก๋์ ๋ ธ๋์์ 1์๊ฐ ๋์ .Net 2.1 Preview 2๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์ปดํ์ผํ์ต๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค. ํ์ง๋ง ํ์ฌ๋ก์๋ ํ๋ก์ธ์ค๊ฐ ์ด๋ฏธ 2GB ์ด์์ RAM์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด ๋์ผํ ์ปดํจํฐ์์ PerfView๋ฅผ ์คํ ์ค์ด๊ณ GC ๋คํ๋ฅผ ์์ง ์ค์ ๋๋ค. OneDrive ๋งํฌ๋ฅผ ๋ณด๋ผ ์ ์๋ ์ด๋ฉ์ผ ์ฃผ์๊ฐ ์์ต๋๊น? ๋ถํํ๋ ์ด ์ค๋ ๋์์ ์ง์ ๊ณต์ ํ ์ ์์ต๋๋ค.
๋์์ด ๋๋ค๋ฉด ๋ ๋ง์ ๋ฉํธ๋ฆญ์ด๋ GC ๋ก๊ทธ๋ฅผ ์์งํ ์๋ ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค
@ronald7 _redacted_ @ Maoni0์๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค
์๋ ํ์ธ์ @sebastienros @Maoni0 ๋ฐฉ๊ธ ๋ ๊ฐ์ PerfView gcdump์ VMMap ํ์ผ์ด ํฌํจ๋ ์ด๋ฉ์ผ์ ๋ณด๋์ต๋๋ค. ์ด๊ฒ์ด ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ ์ชฝ์์๋ ์ฌ์ ํ ๋๋ฏธ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ์ด ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋์์ ์ฌํํ๋ ค๊ณ ํฉ๋๋ค.
๊ฐ์ฌ ํด์!
์ ๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์์ต๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ ๋ ๋ฐ์ํ์ง ์์ต๋๋ค! ์คํฌ๋ฆฐ์ท์ ์๋นํ ๊ฐ๋จํ dotnet core web api ์ฑ์ ์ฌ์ฉํ์ฌ ์ฝ 50๊ฐ์ ์์ฒญ์ ์ํํ ํ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ณด์ฌ์ค๋๋ค.
๋ฐฉ๊ธ Ubuntu 16.04์์ ์คํ๋๋ ASP.NET Core ์ฑ์ 1.1์์ 2.0์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋๋ฐ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ฝค ์ฌํด์ OOM ์ค๋ฅ๋ก ์ธํด ์ปค๋์ด ์ฑ์ ์์ฃผ ์ฃฝ์ด๋๋ฐ 1.x๋ก ๋ค์ ๋ค์ด๊ทธ๋ ์ด๋ํ ๊น ๊ณ ๋ฏผ์ค์ ๋๋ค. ์ ํ ๋ก๋ํ ์ ์๋ ํ์ด์ง๊ฐ ์์ต๋๋ค. Kestrel์ ๋ค์ ์์ํ ํ์๋ ์ฑ์ ๋จ์ผ ์์ฒญ ํ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฆ์ ์์งํฉ๋๋ค! ์๋ฒ ์ ๊ทธ๋ ์ด๋์ ๋ํด ์๊ฐํ์ง๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ASP.NET Core ์ฑ์ ๋ํ ์ฌ๊ธฐ์ ์ค๋ช ์ ๋ฐ๋ฅด๋ฉด ๋์์ด ๋์ง ์์ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ์ ์คํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ASP.NET MVC Core + EF Core... ๋๋ฌด ๋ฉ์ง ๊ฒ์ ์์ต๋๋ค. ์๊ฐ์ด ๋๋ฉด ๋ฌธ์ ๋ฅผ ์ฌํํ๊ธฐ ์ํด ์ํ์ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ์คํ์ ๋จ์์ฑ์ ๊ณ ๋ คํ ๋ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
FWIW, ๋ด๊ฐ ์ ๊ทธ๋ ์ด๋ํ ์์คํ ์๋ .NET Core ์ฝ์ ์ฑ์ด ์์ผ๋ฉฐ 2.0 ์ ๊ทธ๋ ์ด๋ ํ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฏ๋ก ์ด๊ฒ์ ํ์คํ ASP.NET Core ๊ด๋ จ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๊ด๋ จ ๊ฐ๋ฅ์ฑ: https://github.com/aspnet/KestrelHttpServer/issues/2214
@danports GC.Collect()๋ฅผ ํธ์ถํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๊ธ๊ฒฉํ ๊ฐ์ํ๋์ง ํ์ธํด๋ณด์ จ์ต๋๊น? ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ด๋์๋ถํฐ ์์ํด์ผ ํ๋์ง์ ๋ํ ๋จ์๋ฅผ ์ค ๊ฒ์ ๋๋ค. GC.Collect()(๋๋ GC.Collect/GC.WaitingForPendingFinalizers/GC.Collect ์ํ์ค)๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ทน์ ์ผ๋ก ์ค์ผ ์ ์๋ ๊ฒฝ์ฐ ์ด๋ GC๊ฐ ์ด๋ฅผ ํ์ํ ์ ์๋๋ก ๋ผ์ด๋ธ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ทธ๋งํผ ๋ง๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
@Maoni0 ์์ง ์๋ํ์ง ์์์ต๋๋ค. ๋ด ๋ฌธ์ ๊ฐ GC์ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋๋๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๊ฐ์ํ๋ ๊ฒ์ ๋ณด์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ด .NET Core 2.0 ์ฑ์ด ์คํ ์ค์ผ ๋์ ๋น๊ตํ์ฌ ๋๋ต 2-3๋ฐฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ๋ ๊ฒ ๊ฐ์ต๋๋ค. .NET ์ฝ์ด 1.1. ๐
์ง๊ธ์ .NET Core 1.1๋ก ๋ค์ ๋ค์ด๊ทธ๋ ์ด๋ํ์ผ๋ฉฐ ๋์ค์ ์๊ฐ์ด ๋ ์์ ๋, ์๋ง๋ .NET Core 2.1์ด ์ถ์๋ ํ์ ๋ค์ ๋ฐฉ๋ฌธํ ๊ฒ์ ๋๋ค. (์ ๋ 2.0์์ ๋ง์ ๋ฌธ์ ์ ๋ถ๋ชํ๊ณ ์ด๊ฒ์ ๊ทธ ์ค ํ๋์ผ ๋ฟ์ ๋๋ค.)
GC.Collect()
๋ ๋์์ด ๋์ง ์์ต๋๋ค. 200k int์ ์ฌ์ ์ ๋ฐํํ๋ ํ๋์ ์ปจํธ๋กค๋ฌ๊ฐ ์๋ ๋งค์ฐ ๊ฐ๋จํ ASP.NET Core 2.0 ๋ฐ 2.1 Web API๋ฅผ ์๋ํ์ต๋๋ค. ์ฑ์ด ๋ ์ด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ผ๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ ์์ฒญ๊ณผ ํจ๊ป ๊ณ์ ์ฆ๊ฐํฉ๋๋ค.
200K ์ ์(4B)๋ฅผ ๋ฐํ ํ๋ @Serjster ๋ 800KB๊ฐ ํ์ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ https://github.com/aspnet/Home/issues/1976#issuecomment -289336916 ์ฃผ์์ ์ค๋ช ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ ๋ฐฐ์ด ํ์ ์ฌ์ฉํ์ฌ ์์ฒญ ๊ฐ์ ์ฌ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ํ ์์๋๋ฉด ์ข์ ์ ์ ์ฝ๋๊ฐ 64๋นํธ ๋ชจ๋์์ ์คํ ์ค์ธ ๊ฒฝ์ฐ ํฌ์ธํฐ๋ฅผ ํฌํจํ๋ ๋ฐฐ์ด/๋ชฉ๋ก ๋ฑ์ 32๋นํธ์ ๋นํด ํฌ๊ธฐ๊ฐ ๋ ๋ฐฐ๋ผ๋ ๊ฒ์ ๋๋ค. ๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ธฐ์ตํ๋ค๋ฉด ์ ์ฒด ํ๋ ์์ํฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก 64๋นํธ OS์์ ๋ชจ๋ CPU ์ฝ๋ 32๋นํธ๋ฅผ ์คํํฉ๋๋ค. ๋ฐ๋ผ์ ์ฝ๋๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ์ฌ๋๋ค์ ์ค์๋ก LOH ๋ฌธ์ ์ ๋ถ๋ชํ ์ ์์ต๋๋ค.
๋๋ @Serjster ์ ํจ๊ป ์ผํ๊ณ ์์ผ๋ฉฐ ์ฌ๊ธฐ์ ๋ด๊ฐ ์ฐพ์ ๊ฒ์ด ์์ต๋๋ค. asp.net ์ฝ์ด(์ต์ ํ
์คํธ์์ 2.1 ์ฌ์ฉ)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋๋ผ ์น API ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด ์ง๋จ ๋๊ตฌ๋ฅผ ์คํํ ๋(๋๋ ์ฝ๋์ ์ค์ ๋ ํ๋ก์ธ์ค ์์
๋ฉ๋ชจ๋ฆฌ ํ์ธ) ๋ฐ์ดํธ ์๊ฐ ๋ฐํ๋จ์ ์ ์ ์์ต๋๋ค. ๋์ ์ ๋๋ฌํ๋ฉด์ ๊ณ์ ์์นํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ ์ ๋ฐํํ๋ ๋จ์ผ ์น API ์๋ํฌ์ธํธ๊ฐ ์๋ ๊ฒฝ์ฐ
๋ฐํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ํฌ๊ธฐ์ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ ์์ ๋ชจ๋ ์ซ์๋ ๋ ํฌ๊ฑฐ๋ ์์ต๋๋ค(๋ ๋ฒจ ์คํ ์ ํฌํจ). ๊ทธ๋ฌ๋ ์ฑ์ฅ ํจํด์ ๋์ผํฉ๋๋ค(์ผ๋ช , ๋ง์ ์์ฒญ ํ์ ์ํ์ด ๋ ๋๊น์ง ์ฑ์ฅํ๊ณ ์ฑ์ฅํ ๊ฒ์ ๋๋ค) .
๋ฉ์๋ ํธ์ถ์ GC.Collect๋ฅผ ์ถ๊ฐํ๋ฉด(๊ทธ๋์ ๋ชจ๋ ๋จ์ผ ์์ฒญ์์ ๋ฐ์ํ๋ฏ๋ก ์์ค์ ํจ์ฌ ๋ฎ์ง๋ง ์์ค์ด ๋จ์ด์ง ๋๊น์ง ์ฌ์ ํ ์ฑ์ฅ ๊ธฐ๊ฐ์ด ์์ต๋๋ค.
๋ค๋ฅธ ํฅ๋ฏธ๋ก์ด ์ธ๋ถ ์ฌํญ์ ์ค๋ ์ท์ ์ํํ ๋ ๊ฐ์ฒด ์์ ํ ํฌ๊ธฐ๊ฐ ๋ฐฉ๋ฌธํ ๋๋ง๋ค ํฌ๊ฒ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ๊ทธ๋ํ๋ ๊ณ์ํด์ ๋ ๋์ ์ซ์๋ฅผ ๋ณด์ฌ์ค๋๋ค(ํ๋ก์ธ์ค๋ฅผ ์ก๊ณ ์์ ๋ฉ๋ชจ๋ฆฌ ์ค์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค).
๊ทธ๋ํ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์๋๊ณ ์๋ค๊ณ ์์ฌ๋๊ธฐ ์์ํ์ง๋ง(์ด ๋ฉ๋ชจ๋ฆฌ๋ ์ผ๋ถ asp.net ์ฝ์ด ์ฌ์ฉ/์์ ์์ธก ๋ ผ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปค์ง) ์ด๊ฒ์ด ๋ฐ๋์ ์๋น/๋์ถ๋ ๋ฉ๋ชจ๋ฆฌ๋ ์๋๋๋ค. ๊ทธ๋๋ ํ์ธํ๊ธฐ์ ์ถฉ๋ถํ์ง ์์ผ๋ฏ๋ก ์ง์์ด ๋ ๋ง์ ์ฌ๋์ด ์ฐจ์ ํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
ํธ์ง - ๋ค์ @davidfowl ์๊ฒฌ: ๋๋ฌผ๊ฒ ์์ง๋๋ ๊ฒ์ ๋ํ ๊ทํ์ ์๊ฒฌ๊ณผ ๊ด๋ จํ์ฌ... ์ด๊ฒ์ ์๋ฏธ๊ฐ ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ผ๋ง๋ ๊ฑธ๋ฆฝ๋๊น? ์์ฒญ ์ฌ์ด์ 30์ด ์ด์ ์ด๋ํ ์ ์์ผ๋ฉฐ GC๋ ์ง๋จ ์ฐจํธ์ ํด๋น ๋ฉ๋ชจ๋ฆฌ ๋ฒํธ๋ฅผ ๋ค์ ๋ฎ์ถ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ์ฌ๊ธฐ์ ๋ํด ๋ฌด์งํ์ง๋ง ๋จ์ง ๊ถ๊ธํฉ๋๋ค.
ํธ์ง 2 - ์ด์ david๊ฐ ์์ ์์ธํ ๊ฒ์ํ SO ๋งํฌ๋ฅผ ์ฝ์์ผ๋ฏ๋ก ์ด๊ฒ์ด ํ์คํ ์ฐ๋ฆฌ๊ฐ ๋ณด๊ณ ์๋ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๊ธฐ ์์ํ์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ํ๋ ํ๊ฒฝ์์ ์คํ ์ค์ด๋ผ๋ฉด(์ ๋ ดํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ์์) ์ด๊ฒ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํธ์ง 3 - ํ๋์ ๋๋ฆฐ ์ง๋ฌธ. ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ง์์ ์ผ๋ก ์ฌ๋ผ๊ฐ๋๋ฐ LOH ๋ฌธ์ ์ธ ๊ฒฝ์ฐ ํ ํฌ๊ธฐ๊ฐ ์ฌ๋ผ๊ฐ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ฌ์ค ์ด์ ์ผ ์ดํด๊ฐ ๊ฐ๊ฒ ๋ค์. ํ์ ์ฌ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋๋ค. ํ๋ก์ธ์ ํ ๋น ๋ฉ๋ชจ๋ฆฌ๋ ์ฌ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ๋์ง ์์ ์กฐ๊ฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋ํ ๊ฒ์ ๋๋ค.
@RemyArmstro Dictionary<int, int>
์ SortedDictionary<int, int>
๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๊น? ์ฌ์ ์ ์๋ง๋ ์ง์์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ์์ผ๋ฉฐ ๋ชจ๋ ํญ๋ชฉ์ ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ์๋ ์์ต๋๋ค. SortedDictionary๊ฐ ๊ตฌํ๋๋ ๋ฐฉ์์ ํ๋์ ํฐ ํ ๋น ๋์ ๋ง์ ์์ ํ ๋น์ ๋ง๋ญ๋๋ค.
ํธ์ง: ์๋ต ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ง์ ์ง๋ ฌํํ์ง ์๊ณ ๋ฌธ์์ด๋ก ์ง๋ ฌํํ๋ ๊ฒฝ์ฐ LOH ํ ๋น์ด ๋ฐ์ํ ์๋ ์์ต๋๋ค.
@wanton7 ๊ทํ์ ์๋ต์ ์์ ์ด ๋๋ฝ๋์ด ์์ต๋๋ค. ์ฌ์ ์ ๋น์ฐ์ ์ผ๊ฐ์ผ ๋ฟ์ ๋๋ค. ๋ชฉ๋ก, ๋ฐฐ์ด ๋ฑ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ชจ๋ ๋์ผํ ์์ ์ ์ํํฉ๋๋ค. ๊ทธ๋ฌ๋ LOH๊ฐ ์ด๊ฒ์ ์ผ์ผํค๋ ๊ฒฝ์ฐ ์ง์ ํ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ๋ ๊ฒ์ฒ๋ผ์ด ๋์์ ์๋ง๋ ๊ด์ฐฎ์ต๋๊น? ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น? ์ฑ์ด ์ถฉ๋ํฉ๋๊น?
@Serjster ok ๋๋ ์ด๊ฒ์ด ์ผ์ด๋๋ ์์ ๊ฒฝ์ฐ๊ฐ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋์๊ฒ ํฐ ๋ชฉ๋ก, ์ด์ ๊ฐ์ ๋ฐฐ์ด์ด ์๊ณ ๋ฐ์ด๋๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ ํ๋์ API ํธ์ถ๋ก ์ด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๊ฒ์ ๋งค์ฐ ์ด๋ก์ ์ธ ์ผ์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ผ์ข
์ ์น API๊ฐ ์๊ณ ๊ทธ๋ก๋ถํฐ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ์ป์ ๋ ํ์ด์ง์ ์ฌ์ฉํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์ธก์ 10000๊ฐ์ ํญ๋ชฉ์ ๋ณด๋ด๋ฉด ์ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ง๊ณ API ์๋ ๋ฐฉ์์ ๋ณ๊ฒฝํ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์์ ๋ง์ ์ฒญํฌ ๋ชฉ๋ก ๋ฐ ์ฌ์ ๊ตฌํ์ ๋ง๋ค์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ ๊ฒ ํฐ ๋ฐฐ์ด์ ์ค์ ๋ก ์ฌ์ฉํ๋ค๋ฉด ์ฒญํฌ ๋ชฉ๋ก์ผ๋ก ๋ฐ๊พธ๊ฑฐ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์๋ ๋ ํ๋ง์ ์๋ํ ์ ์์ต๋๋ค.
๋ง์ดํฌ๋ก์ํํธ๊ฐ ์ด์ ๊ฐ์ ์ํฉ์์ ๋ชจ๋ ์ฌ๋์ด ์ฌ์ฉํ ์ ์๋ ์ฒญํฌ ๊ตฌํ์ ๋ง๋ค๋ฉด ์ข๊ฒ ์ต๋๋ค.
@wanton7 ์์ง ์์ ์ ๋์น๊ณ ์์ต๋๋ค. ๋ชฉ๋ก์ ํฌ๊ธฐ๋ ์ค์ํ์ง ์์ต๋๋ค. ๋จ์ผ ํญ๋ชฉ ๋๋ ์์ ๋ชฉ๋ก์ด๋ผ๋ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
@Serjster ์๋ง๋ ๋๋ ๋์ด ๋ฉ์์ ์๋ ์์ง๋ง ๋จ์ผ ํญ๋ชฉ์ด๋ ์์ ๋ชฉ๋ก์ ๋ณด๋ด๋ฉด ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋ค๊ณ ๋งํ ๊ฒ์๋ฌผ์ ๋ณด์ง ๋ชปํ์ต๋๋ค. ์ญ์ ํ์ จ๋์?
๋๋ @RemyArmstro ์์ ๊ทธ๋ ๋ค์ํ ํฌ๊ธฐ์ ์ฌ์ ์ ๋ํด ์ด์ผ๊ธฐํฉ๋๋ค. ๋๋ corefx๋ฅผ ํ์ธํ๊ณ Dictionary๋ ๋ฐฐ์ด์ ํ ๋นํ๊ฑฐ๋ ์ด๊ฒ๋ค์ ํ ๋นํฉ๋๋ค.
private struct Entry
{
public int hashCode; // Lower 31 bits of hash code, -1 if unused
public int next; // Index of next entry, -1 if last
public TKey key; // Key of entry
public TValue value; // Value of entry
}
85000 ๋ฐ์ดํธ ํ ๋น์ LOH ํ ๋น์ ์ผ์ผํค๋ฏ๋ก int ํค์ int ๊ฐ์ 5313 ํญ๋ชฉ์ ์ฉ๋์ ๊ฐ์ง Dictionary๋ LOH ํ ๋น์ ์ ๋ฐํฉ๋๋ค. ์ฉ๋์ด ์ซ์๋ ํญ๋ชฉ๊ณผ ๊ฐ์ง ์๊ณ ์์๋ก ์ฉ๋์ด ํ์ฅ๋ ๊ฒ ๊ฐ์ต๋๋ค. private Dictionary์ private Resize ๋ฐฉ๋ฒ์ ํ์ธํ์ญ์์ค. ๊ฐ ๊ตฌ์กฐ์ฒด๋ ์ถ๊ฐ ํ ๋น๊ณผ ๋ฉ๋ชจ๋ฆฌ ํจ๋ฉ์ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก ๋ ๋ฎ์ ํญ๋ชฉ๋ LOH ํ ๋น์ ์ ๋ฐํ ์ ์์ต๋๋ค.
์ฌ์ ๊ตฌํ ์ธ๋ถ ์ ๋ณด Dictionary.cs
ํธ์ง: ๊ณ ์ URL
@wanton7 ๊ฐ์ฌํฉ๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ๊นจ๋ฌ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ๋ํ ํ๋ฅญํ๊ณ ๊ฐ๋จํ ์๋ฃจ์ ์ด ์๋ค๋ ๊ฒ์ ๋จ์ง ์ํ๊น์ด ์ผ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๋ง์ด ์ธ์ํ๊ณ ์ฝ๋ ์์ฑ ๋ฐฉ๋ฒ์ ์กฐ์ ํ๋ ๊ฒ์ผ๋ก ๊ท๊ฒฐ๋ฉ๋๋ค. ๋จ์ ์ ์ด ๊ด๋ฆฌ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ข ๋ ๊ด๋ฆฌ๋๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๊ธฐ ์์ํ๋ค๋ ๊ฒ์ ๋๋ค. :( ๊ฒฐ๊ตญ ์ด ํ ๋น ์ ํ์ ์ค์ ๋ก ์๋ฐํ๋ ์์ญ์ ๋ช ๊ฐ ๋ฐ์ ์์ ์ ์์ง๋ง ์์ญ ์ค ํ๋๋ ์ฐ๋ฆฌ ์ฑ์ ํต์ฌ์ด๋ฏ๋ก ํ์ฌ ๋ง์ด ๋ณผ ์ ์์ต๋๋ค. ๊ทธ ๋ถ๋ถ์ ๋ค์ ์๊ฐํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋ํฐ๋งํ๊ณ ์ด ํฌ๋ฆฌํ๊ฐ ๊ฐ์ง๋๋ ๋ค๋ฅธ ์์ญ์ ์ฐพ์๋ด์ญ์์ค. ๋ค์ ํ ๋ฒ ๊ฐ์ฌํฉ๋๋ค!
์ค์ ๋ก ๋น์ทํ ์ํฉ์ด ๊ณง ๋ฐ์ํ๋ฉฐ ์ฒญํฌ IList<T>
๊ตฌํ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๋นํธ ์ํํธ๊ฐ ๊ฐ๋ฅํ ์ฒญํฌ์ ์ฝ๊ฐ์ ํฌ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ฑ์ ๋นํธ ์ํํธ์ ๋ง์คํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ ํฐ ์ฒญํฌ์ ๋ ์์ ์ฒญํฌ ์ค ์ด๋ ๊ฒ์ด GC์ ๋ ์ ์ตํ์ง ์๊ณ ์ถ์ต๋๋ค. 1KB์์ 64KB ์ฌ์ด์ ํฌ๊ธฐ. ๋ ์์ ์ฒญํฌ๋ GC์ ๋ํ ๋ ๋ง์ ์ฐธ์กฐ๋ฅผ ์๋ฏธํ์ง๋ง ๋ ํฐ ์ฒญํฌ๋ ์์ถ ๋ฐ ์กฐ๊ฐํ์ ๋ ๋์ ์ ์๋ค๊ณ ์ถ์ธกํฉ๋๋ค.
๋น์ ์ ์ดํด๋ ์ ํํฉ๋๋ค - ๋๋ ๋๋ฌด ํฌ์ง ์์ ํฌ๊ธฐ๋ก ๊ฐ ๊ฒ์ ๋๋ค. ์๋ง๋ 4k/8k๋ฅผ ์๋ํ์ญ์์ค.
@Maoni0 ๊ฐ์ฌํฉ๋๋ค!
Mono์์ ์ฝ๋๋ฅผ ์คํํ๋๋ผ๋ ๋ถ์พํ ์ผ์ ๋นํ์ง ์๋๋ก 4KB๋ฅผ ์ ํํ์ต๋๋ค. http://www.mono-project.com/docs/advanced/garbage-collector/sgen/working-with-sgen/ ์ ์ฝ๊ณ LOH ์๊ณ๊ฐ์ด Mono์์ 8000๋ฐ์ดํธ์ ๋ถ๊ณผํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ์ง์ ์ด ์์ต๋๊น?
ํ ํฌ๊ธฐ๊ฐ ๋์ผํ๊ฒ ์ ์ง(๋๋ ๊ฐ์)ํจ์๋ ๋ถ๊ตฌํ๊ณ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ์ ์ฆ๊ฐํ๋ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ด์ฐฐํ๊ณ ์์ต๋๋ค.
@sebastienros ์ด๊ฑฐ ํ ๋ฒ ๋ ๋ณผ ์ ์๋์? ์ฌ๋๋ค์ด ์๋๋ฆฌ์ค๋ฅผ ๋ ์์ธํ ์กฐ์ฌํ๋ ๋ฐ ๋์์ด ๋๋ ๋ช ๊ฐ์ง ์์ธํ ์ง์นจ์ ์ ๊ณตํ ์ ์์๊น์?
๋ค์์ ์ฐ๋ฆฌ์ ์ํฉ์์ ๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ํญ๋ชฉ์ ๋๋ค.
Dictionary<int, int>
๊ฐ์ฒด๋ง ๋ฐํํฉ๋๋ค. ๊ทธ ์ด์์ ์์ต๋๋ค.๋ค์๊ณผ ๊ฐ์ ์ฝ๋:
public async Task<IActionResult> SampleAction()
{
var list = new Dictionary<int, int>();
for (int n = 0; n < 1000; n++) list.Add(n, n);
return Ok(list);
}
์ฌํํ๋ ค๋ฉด ์ ๋นํ ๋ถํ ํํ๋ฅผ ์๋ฎฌ๋ ์ด์ ํด์ผ ํฉ๋๋ค. Postman์ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ํด๋ฆญํ๊ณ ์ด ๋์์ ๊ด์ฐฐํ ์ ์์์ต๋๋ค. ๋ก๋ ์๋ฎฌ๋ ์ด์ ์ ์ค๋จํ๊ณ ํ ํฌ๊ธฐ๊ฐ ๊ฐ์ํ๋ ๊ฒ์ ๋ณด์์ง๋ง ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ๋ ๋์ผํ๊ฒ ์ ์ง๋์์ต๋๋ค(GC๋ฅผ ๊ฐ์ ์ ์ฉํ ๊ฒฝ์ฐ์๋).
๋ด ํ๋ก์ ํธ ์ค ํ๋์์๋ ์ด๊ฒ์ ๋ณด๊ณ ์์ง๋ง .Net Core 2.1(SDK 2.1.302)์ ๋์์ผ๋ก ํ๋ ์๋ก์ด .net Core API์์ ๋ค์ ๋ง๋ค ์๋ ์์ต๋๋ค.
Visual Studio 15.8.0 Preview 4๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ ์ํ API ํ๋ก์ ํธ๋ฅผ ์ฒจ๋ถํ์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐ๋ฅผ ํ์ํ๊ธฐ ์ํด .net ์ฝ์ด ์ฝ์ ์ฑ์ด 0.5์ด๋ง๋ค ๊ธฐ๋ณธ๊ฐ GET ๋์ ์ ๋๋ฌํ์ฌ 2๊ฐ์ ๋ฌธ์์ด์ ๊ฐ์ ธ์์ต๋๋ค. ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋๋ฆฌ์ง๋ง ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ ํ๋ก์ ํธ์์๋ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ ์ ์์ต๋๋ค.
์คํ ๊ตํ์์ ์ด ๊ฒ์๋ฌผ์ ์ฐพ์์ต๋๋ค.
์ด ๋์์ด ์กด์ฌํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ฆด๋ฆฌ์ค ๋ชจ๋์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋กํ์ผ๋งํ ์ฌ๋์ด ์์ต๋๊น? ์ค๋ ํ ๋ฒ ์๋ํด ๋ณด๊ณ ๋ฌธ์ ๊ฐ ์ง์๋๋์ง ํ์ธํ๊ฒ ์ต๋๋ค.
ํธ์ง : ๋ฆด๋ฆฌ์ค ๋ชจ๋์์ ํ๋กํ์ผ๋ง์ ์๋ํ์ง๋ง ๋ฌธ์ ๊ฐ ์ฌ์ ํ ์ง์๋ฉ๋๋ค. ๋๋ ์ฌ์ง์ด ๊ทธ๊ฒ์ด ์ด๋ค ์ํฅ์ ๋ฏธ์น ์ง GC์๊ฒ ๊ฐ์ ๋ก ํ์ธํฉ๋๋ค.
@chrisaliotta ํด๋น ๊ฒ์๋ฌผ์ ๋งํฌํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ ๋ ๊ทธ ํ๋์ ๋ชฐ๋์ต๋๋ค. ๊ทธ๊ฒ์ด ์ฌ๋๋ค์ด ๋ณด๊ณ ์๋ ๊ฒ์ ์ค๋ช ํ๋์ง ๋ณด๋ ๊ฒ์ ์ฐธ์ผ๋ก ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค.
@Eilon @chrisaliotta ๊ฐ์ฌํฉ๋๋ค. ํ์ง๋ง ์ด๊ฒ์ ์ด ํ ๋ก ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ๋๋ฒ๊ทธ ๋ชจ๋์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์๋ .NET์ ์ ์๋ ค์ง ๋์์ด๋ฉฐ ์ด๊ฒ์ด ๋ฆด๋ฆฌ์ค ๋ชจ๋์์ ๋ฉ๋ชจ๋ฆฌ ์๋น(๋ฐ ์ ์ฌ์ ์ธ ๋์)๋ง ์ธก์ ํ๋ ์ด์ ์ ๋๋ค. ๋ํ ๋ฆด๋ฆฌ์ค ๋ชจ๋์์๋ ์๋ฒ GC ๋ชจ๋๋ก ์ธํด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๋ ์ ๋ ์ฆ๊ฐํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ์๋ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ด์ ๋ก ์๋ฌด ๊ฒ๋ ์ฆ๋ช ํ์ง ๋ชปํฉ๋๋ค.
@sebastienros @beef3333 ๊ณผ ๋ด๊ฐ ๊ด์ฐฐํ๊ณ ์๋ ๋์์ด ์์๋๋ ๊ฒ๊ณผ ์ผ์นํฉ๋๊น? ์ฆ, ํ ํฌ๊ธฐ๊ฐ ๊ฐ์ํจ์๋ ๋ถ๊ตฌํ๊ณ Private Bytes๊ฐ ๋๊ฒ ์ ์ง๋๋ ๊ณณ์ ์ด๋์ ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ฌ์ ํ ๊ณต๊ฐ์ด ์์์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ ์ฆ๋ถ ์์ฒญ์ผ๋ก ์ธํด ๊ฐ์ธ ๋ฐ์ดํธ๊ฐ ๊ณ์ ์ปค์ง๋ ๊ฒ์ด ์ด์ํ๊ฒ ๋ณด์ ๋๋ค.
๋๋ฒ๊ทธ ๋ชจ๋์์๋ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฆด๋ฆฌ์ค ๋ชจ๋๋ฅผ ์ฌ์ฉํ๊ณ ์คํธ๋ ์ค๋ฅผ ์ค๋ซ๋์ ์คํํ์ญ์์ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฌดํ์ ์ฆ๊ฐํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๋ ๊ฒ์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌํ์ฉ๋๋ฉด(์๋นํ ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๋๋ผ๋) ๊ทํ์ ๊ฒฝ์ฐ์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ฐฉ๊ธ ๋ฆด๋ฆฌ์ค ๋ชจ๋์์ ์ฒจ๋ถํ ๋์ผํ ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ํ ์คํธํ๋๋ฐ ๋์ผํ ์ ํํ ๋์์ด ํ์๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์ ํ ์คํธํ๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
@beef3333 ์ด ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ 2์๊ฐ ๋์ ๋ก์ปฌ์์ 5K RPS์ ์๋๋ก ์คํํ์ผ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ๋ ์์ ์ ์ ๋๋ค(32GB๊ฐ ์๋ ์ปดํจํฐ์์ 400MB์์ ์ ์ฒด์ ์ผ๋ก 1MB ์ฐจ์ด). GC๋ ์ ๊ธฐ์ ์ผ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ํธ์ถ๋ฉ๋๋ค. ๋ํ ์ด๊ณผ ๊ทผ๋ฌด ์๊ฐ์ ์ฌ๋ฌ ๋คํ๋ฅผ ๊ฒ์ฌํ์ผ๋ฉฐ ์์๋๋ก ๋ค์ํ ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ณ ์์ง๋์์ต๋๋ค. 2.1.1์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
@sebastienros ์ฐพ์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ํต์ฌ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ์ ํด ์ฃผ์ธ์. ํ์ง๋ง ๊ฐ์ฅ ๋น ๋ฅธ ์๋ต ์๊ฐ์ ๋ณด์ฅํ๊ธฐ ์ํด .NET Core๊ฐ ํ๊ท ์์ฒญ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๊น? true์ธ ๊ฒฝ์ฐ ์์ฉ ํ๋ก๊ทธ๋จ ํ์ด ์ฌ์ค์ ๋ ๋๊น์ง ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒ์ด ์์ ํฉ๋๊น? ์๋๋ฉด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ RPS๊ฐ ๊ฐ์ํ๋ฉด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ ๊ฒ์ ๋๊น?
๊ฐ์ ๋ฌธ์ ์
๋๋ค.
asp.net webapi ๋ฐฑ์๋ ์๋น์ค๊ฐ ์์ต๋๋ค.
์คํ์ asp.net mvc, autofac, automapper, castle.dynamicproxy, ์ํฐํฐ ํ๋ ์์ํฌ ์ฝ์ด์
๋๋ค.
๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋จน์ ๋ค์ ์๋น์ค ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.
๋ฒ์ ์ 2.1.0์ ๋๋ค.
@atpyk 2.1.1๋ก ์ ๋ฐ์ดํธ. ๊ทธ๊ฒ์ด ๋์์ด ๋์ง ์๋๋ค๋ฉด ๊ทธ ๊ธฐ์ต์ ์ ์งํ๊ณ ์๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์ ๋ง๋ก ํ๋กํ์ผ๋งํด์ผ ํฉ๋๋ค. ๋๋ https://www.jetbrains.com/dotmemory/ ๋ฅผ ์ฌ์ฉํ์ง๋ง ์๋ง๋ ์ด๊ฒ์ ํ ์ ์๋ ๋ค๋ฅธ ๋๊ตฌ๋ ์์ ๊ฒ์ ๋๋ค. LOH(Large Object Heap)์ ์ค์ ๋ก ํ ๋น๋ ํญ๋ชฉ์ ํ์ํ ์ ์์ต๋๋ค.
32๋นํธ ๋ชจ๋๋ก ์คํ ์ค์ด์ ๊ฐ์? ๋ํ ๊ฐ์ฒด ํ ํ ๋น(~85000๋ฐ์ดํธ ์ด์)์ ์กฐ๊ฐํ๋ก ์ธํด 32๋นํธ ๋ชจ๋์์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์์ธ๋ฅผ ์ ๋ฐํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. Dictionary๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ํ๊ณ๋ฅผ ๋งค์ฐ ์ฝ๊ฒ ๊ทน๋ณตํ ์ ์์ต๋๋ค.
์ ์ฒด .Net Framework์์ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋์์ 32๋นํธ ๋ชจ๋์์ ๋ชจ๋ CPU ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ ๋๋ค. ํ๋ก์ ํธ ์ค์ ์์ 32๋นํธ ์ ํธ๋ฅผ ์ ํ ์ทจ์ํ๊ฑฐ๋ ์๋ฒ ๋ ์ง์คํธ๋ฆฌ์ ์ผ๋ถ ๋ ์ง์คํธ๋ฆฌ ์ค์ ์ ๊ธฐ๋ณธ 64๋นํธ๋ก ์ค์ ํด์ผ ํฉ๋๋ค.
@wanton7 ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๋น์ ์ ์๋ฃจ์ ์ ์๋ํฉ๋๋ค.
2.1.2๋ก ์
๋ฐ์ดํธํ๊ณ win-x64๋ฅผ ์ฌ์ฉํ์ฌ Microsoft Azure ์น์ฑ์ ๋ฐฐํฌํ์ง๋ง ํจ๊ณผ๊ฐ ์์ต๋๋ค. @wanton7
@atpyk ๋ฉ๋ชจ๋ฆฌ ์ค๋ ์ท(dump_)์ ๋ง๋ค๊ณ ๋ถ์(Visual Studio, MemoScope)ํ์ฌ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ๋๋ ์นด์ดํธ๊ฐ ์ฆ๊ฐํ๋์ง ํ์ธํ์ธ์. ๋ ๊ฐ๋ฅผ ๊ฐ์ ธ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋น๊ตํ ์๋ ์์ต๋๋ค.
@sabastienros ์ถฉ๋ถํ ์ฌ๋๋ค์ด ์ด์ ๋ํด ์ฐ๋ ค๋ฅผ ์ ๊ธฐํ์ฌ ๊ทํ/MS๊ฐ ์ค์ ๋ก ์ง์ ๋ถ์์ ์์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ง๋ ์ด๊ฒ์ ์๋ํ ๋๋ก ์๋ํ์ง๋ง ๋์์ธ์ ๊ฒฐํจ์ด ์์ต๋๋ค.
์ฐ๋ฆฌ ์ฑ์ ๊ฒฐ๊ตญ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ๊ณผ ์ถฉ๋์ ์ผ์ผํค๋ฉฐ ์ด ๋ชจ๋ ๊ฒ์ด ํ๋ก๋์ Azure ํ๊ฒฝ์์ ์คํ๋ฉ๋๋ค. ์ด๊ฒ์ ํ์ฉ๋์ง ์์ต๋๋ค.
@atpyk ๊ทธ๋ฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. @sebastienros ๊ฐ ๋งํ ๊ฒ์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ๋ณด๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋กํ์ผ๋งํ์ญ์์ค.
ํ ๊ฐ์ง ์ง๋ฌธ์ ASP.NET Core๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ์ฒซ ๋ฒ์งธ ๋๊ธ์ ๋ค์ ์ฝ๊ณ ASP.NET MVC์ ๋ํด ์ธ๊ธํ์ต๋๋ค. ASP.NET MVC์ ASP.NET Core๋ ์์ ํ ๋ค๋ฅธ ๋ ์ ํ์ ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ASP..NET Core์ ๋ํ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋๋ค.
ํธ์ง: ๋ฒ์ ๋ฒํธ์์ ASP.NET Core๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง ํ์ธํ๊ณ ์ถ์์ต๋๋ค.
์ฐ๋ฆฌ๋ .net ์ฝ์ด MVC๋ฅผ ์ฌ์ฉํฉ๋๋ค. @wanton7
๊ธฐ์ต์ ๋ถ์ํ๊ณ ์์ต๋๋ค. Castle Dynamic Proxy๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
@Serjster ํ๋ก๊ทธ๋จ์ด 32๋นํธ .NET Core์์ ์คํ๋๊ณ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์์ธ๋ก ์ธํด ์ถฉ๋ํฉ๋๊น? ์ฝ๋๊ฐ ๋ง์ LOH ํ ๋น์ ์ํํ๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐํ๊ฐ ์์ธ์ผ ์ ์์ต๋๋ค.
32๋นํธ ํ๊ฒฝ์์ ์คํ ์ค์ธ ๊ฒฝ์ฐ ๋ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค. ์ฝ๋๋ฅผ ์์ ํ์ฌ LOH๋ฅผ ํผํ๊ฑฐ๋ 64๋นํธ ํ๊ฒฝ์ผ๋ก ์ ํํ์ญ์์ค.
์ ๋ Azure์ ์ต์ํ์ง ์์ง๋ง ์ฝ๊ฐ์ ์ธํฐ๋ท ๊ฒ์ ํ์ https://blogs.msdn.microsoft.com/webdev/2018/01/09/64-bit-asp-net-core-on-azure-app ๋ฅผ ์ฐพ์์ต๋๋ค.
@Serjster ์ฌ๊ธฐ์ ์๋ ๋ชจ๋ ๋ณด๊ณ ์๊ฐ ๋์ผํ์ง๋ ์์ผ๋ฉฐ ๊ฐ๊ฐ์ ๋ค๋ฅธ ์ฌ๋ก์ ์ ํจ์ฑ์ ํ์ธํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. "๋ด ์ฑ์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์์ต๋๋ค"์ ๊ฐ์ ๊ฒ์ ํ๋ ์์ํฌ ๋๋ฌธ์ด ์๋๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก ๊ฐ ๊ฒฝ์ฐ๊ฐ ์ค์ ์ธ์ง ํ์ธํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋น์ ์ ๊ธฐ์ต์ด ์ฆ๊ฐํ๋ ์ด์ ์ ๋ํด "๋๋ ๋ฏฟ์ต๋๋ค"๋ผ๊ณ ๋๋ตํ์ต๋๋ค. ์ ์ค๋ช ํ์ ํด๊ฒฐ๋์ จ๋์? ๋๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์์ผ๋ฉฐ ์ด ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ์ฌํํ๊ธฐ ์ํด ๋ก์ปฌ์์ ์คํํ ์ ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ๊ณตํ ์ ์์ต๋๊น?
@sebastienros ์ฐ๋ฆฌ๊ฐ ๊ฒฐ๊ตญ ์ฐพ์ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ์๋น๊ฐ ์ฆ๊ฐํ์ง ์์์์๋ ๋ถ๊ตฌํ๊ณ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ๊ณ์ ์ฆ๊ฐํ๋ค๋ ๊ฒ์ ๋๋ค. ASP.NET ์ฝ์ด๊ฐ ๋ ๋ง์ ๊ฒ์ ์ก์์ผ ํ๋ค๋ ๊ฒ์ ์๋ฆฌ๊ธฐ ์ํด ๋ช ๊ฐ์ง ๊ฒฝํ์ ๋ฐฉ๋ฒ์ ์ํํ๊ณ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ฐ ์์ฒญ์ ๋ํด ์ง์์ ์ผ๋ก ๋ ๋ง์ ๊ฒ์ ํ ๋นํ๋ ๊ฒ ๊ฐ์์ต๋๋ค. ์ด ์ ์์ ๊ฑฐ์ ๋์๊ฒ ํ์์ค๋ฌ์ ๋ณด์ด์ง๋ง ๋ด๊ฐ ํ๋ฆด ์ ์์ต๋๋ค.
์ด๋ ์ชฝ์ด๋ , @Serjster ์์ ์ ์ฌ๊ธฐ์ ๋ถ๋ช ํ ์ฝ๊ฐ์ ํผ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ด ์ค๋ ๋๊ฐ ๊ณ์ ์ฑ์ฅํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด์ ASP.NET ๋๋(์ฝ์ด 1 ์ด์ )์์๋ ์ด ๋์์ ๋ณผ ํ์๊ฐ ์์์ต๋๋ค(์ ์ด๋ ์ด ์ ๋๋ ์๋๋๋ค. ์ค์ ๋ก ๋ฒ๊ทธ/๋ฌธ์ ๊ฐ ์๋ ์๋ ์์ง๋ง ๋ถ๋ช ํ ๋ง์ ์ฌ๋๋ค์๊ฒ ์์ธ์ด ๋๋ ๊ฒ์ ๋๋ค. ๊ฐ์ ์ง๋ฌธ์ ๊ณ์ํด์ ๋์ง๋๋ค.
์ด ์ค๋ ๋๋ฅผ ์๋๋๋ก ์ํํ๋ ๋์ ์์์ ์๋๋ก ์ค์ ๋ก ๋ค๋ฃจ๋ ๊ณต์ ๊ธฐ์ฌ๊ฐ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ด ๋ช ํํํ๋ ๋ฐ ๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด ์ค๋ ๋๋ฅผ ์๋๋๋ก ์ํํ๋ ๋์ ์์์ ์๋๋ก ์ค์ ๋ก ๋ค๋ฃจ๋ ๊ณต์ ๊ธฐ์ฌ๊ฐ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ด ๋ช ํํํ๋ ๋ฐ ๋์์ด๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ ๋ ๋ฒ์งธ. .NET Core 2.1์ด ์ด์ ๋ฒ์ ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ด๋ จํ์ฌ ๋ "๊ธฐํ์ "์ธ ์ด์ ๋ฅผ ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
@sebastienros ์ฌ๊ธฐ์์ ๋ฌธ์ ์ ๋ํ ์์ฝ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๊น? 81๊ฐ์ ๋๊ธ์ด ์์ต๋๋ค - ๋๋ ๊ทธ๊ฒ๋ค์ด ๋ฌธ์ ์ ๋ํ ์ ๋ถ๊ฐ ์๋๋ผ๋ ์ธ์์ ๋ฐ๊ณ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฌ๊ธฐ์ ๋ชจ๋ ๊ณ ์ ํ ๋ฌธ์ ๋ฅผ ๋์ดํ๊ณ ๊ฐ๊ฐ์ ๋ํ ์ฌํ์ด ์๋์ง ํ์ธํ ์ ์์ต๋๊น? ๋ฉ๋ชจ๋ฆฌ ์ฆ๊ฐ๋ฅผ ์ธ๊ธํ ์ฌ๋๋ค์ด ์ถฉ๋ถํ ์์ต๋๋ค. ์ ์๊ฐ์๋ ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ฌํ์ ์ป๊ณ ์ด๊ฒ์ด ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ ํ๋ ๊ฒ์ ์ ๋นํํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์ ํ๋. ํ์ฌ ์ด ๋ชจ๋ ์ค๋ ๋๋ฅผ ์๋ณํ๊ณ ๊ฐ ์ค๋ ๋์ ์ํ๋ฅผ ํ์ธํ๋ ค๊ณ ํฉ๋๋ค. ์ด ๋จ์ผ ์ค๋ ๋๋ ๋ ์ด์ ์ง์ ๊ฐ๋ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ์ด ๋ฌธ์ ๋ฅผ ๋ซ๊ณ ๊ฐ ๋ณด๊ณ ์์ ์ค์ ์ ๋ ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ๋ฌธ์ ๋ฅผ ๋ค์ ์ด ๊ฒ์ ๋๋ค. ์ด ์ค๋ ๋์์ ํ๋ก์ฐํ๋ ค๋ ์ฌ๋๋ค์ ์ํด ์ฌ๊ธฐ์ ๋งํฌํ๊ฒ ์ต๋๋ค.
๋์์ ๋ชจ๋ ๊ถ์ฅ ์ฌํญ, ์๋ ค์ง ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ (LOB, HttpClient, ...) ๋ฐ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ถ์ํ๊ณ ๋ณด๊ณ ํ๋ ๋ฐฉ๋ฒ์ด ๋์ด๋ ๋ฌธ์๋ฅผ ์์ฑํฉ๋๋ค.
์ด ๋ฌธ์ ์ ๊ด์ฌ์ ๊ฐ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ฌ์ ์ ๊ฐ์งํ๊ธฐ ์ํด ์ง๋ 6๊ฐ์ ๋์ Linux ๋ฐ Windows ๋ชจ๋์์ Azure์์ ASP.NET ์ ํ๋ฆฌ์ผ์ด์ ์ 24์๊ฐ ๋ฐ 7์ผ ๋์ ๊ณ์ ์คํํด ์์ต๋๋ค. ์ด๋ฌํ ํ ์คํธ๋ ๋งค์ผ ๋๋ ๋งค์ฃผ ๋ฐ๋ณตํ ๋๋ง๋ค ์ต์ ASP.NET ์์ค๋ฅผ ๊ฐ์ ธ์ต๋๋ค. RPS, ๋๊ธฐ ์๊ฐ, CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ธก์ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ EF Core, MVC ๋ฐ Razor๋ฅผ ์ฌ์ฉํ๋ฉฐ ์๋นํ ๋ถํ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ธฐ ์ํด 50% CPU๋ก ์ ์ง๋ฉ๋๋ค.
๋น์ ์ (๋งค์ผ ๋ณด๊ณ ์๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ์ฐพ์๋ณด๊ธฐ)์ด ์ฌ์ดํธ์ ๊ณต๊ฐ์ ์ผ๋ก ์ฌ๊ธฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์์ต๋๋ค https://msit.powerbi.com/view?r=eyJrIjoiYTZjMTk3YjEtMzQ3Yi00NTI5LTg5ZDItNmUyMGRlOTkwMGRlIiwidCI6IjcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0NyIsImMiOjV9&pageName=ReportSectioneeff188c61c9c6e3a798
์ด๋ฅผ ํตํด ๊ณผ๊ฑฐ์ ์ผ๋ถ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๊ณ ํ์ฌ ์์คํ ์ ๊ทผ๋ณธ์ ์ธ ๋์๊ฐ ์๋ค๋ ํ์ ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฑฐ์ ๊ฑฐ๋ฆฌ๊ฐ ์์ผ๋ฉฐ ์๋ณํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค. ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ๋คํ ๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ฐ๋ฆฌ๋ฅผ ๋์ธ ์ ์๋ ์ฃผ์ ๋ฐฉ๋ฒ์ ๋๋ค.
@sebastienros ์ ๋ฐ์ดํธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์๋ก์ด "ํ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ํ ๋น" ๋ฌธ์ ์ ๋ ๊ฐ๊น๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ง๊ธ ๋ฌธ์ ๊ฐ ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ์๋ก์ด ์ต์ ํ ์ถ๋ก ์ด ํจ์ฌ ๋ ๊ณต๊ฒฉ์ ์ผ ์ ์์ต๋๋ค. ํ์คํ์ง ์์ต๋๋ค... ํ์ง๋ง ์ด ์ค๋ ๋๋ฅผ ์ค์ ๋ก ํ๊ฐํ๊ณ ์ฌ๋๋ค์ด ๋ณด๊ณ /์คํดํ๊ณ ์๋ ๊ฒ์ ๋ํ ๋ช ๊ฐ์ง ํตํฉ๋ ์ค๋ช /์์ฝ์ ์ ์ํ๋ ์ฌ๋ฐ๋ฅธ ๊ธธ์ ๊ฐ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ด์ ๋น๋๋ค!
๋ชจ๋ ๊ฐ๋ณ ๋ณด๊ณ ์๋ ๊ฒฉ๋ฆฌ๋์์ผ๋ฉฐ ๊ฐ๋ณ ํ์ ์กฐ์น๋ฅผ ์ทจํ๊ณ ์ด๋ฏธ ํด๊ฒฐ๋ ๊ฒฝ์ฐ ๋ซํ๋๋ค. ๋ฃจํ์ ๋ณด๊ดํ๋ ค๋ฉด ์์ ๋กญ๊ฒ ๊ตฌ๋ ํ์ญ์์ค.
๋์์ ๋ชจ๋ ๊ถ์ฅ ์ฌํญ, ์๋ ค์ง ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ (LOB, HttpClient, ...) ๋ฐ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ถ์ํ๊ณ ๋ณด๊ณ ํ๋ ๋ฐฉ๋ฒ์ด ๋์ด๋ ๋ฌธ์๋ฅผ ์์ฑํฉ๋๋ค.
์ด๊ฒ์ ๋์๊ฒ ์์ฒญ๋ +1์ ๋๋ค. ์ฌ๊ธฐ์์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ค ํ๋๋ ์ ๋ณด๋ฅผ ์์งํ ๋ค์ _๋ฌด์์ด_ ๋ฌธ์ ์ธ์ง ๊ฒฐ์ ํ๋ ๋ฐ ๋์์ด ๋๋ '๋๋'์ ๋๋ค. (i) ์์ง, (ii) ์๊ฐ ์ง๋จ ์๋ ๋ฐ (iii) ๋คํ/๊ฒฐ๊ณผ๋ฅผ MS ํ์ ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก ๊ฒ์ํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์ง์นจ์ ๋ฐ๋ฅผ ์ ์๋ ํ๋ฅญํ ๋ฌธ์๊ฐ ์์ผ๋ฉด ๋ ๊ฐ์ง ๋ชจ๋์ ์ค์ ๋ก ๋์์ด ๋ฉ๋๋ค. ์ธํ๋ฆฌ์ ์ธก๋ฉด.
์ฐ๋ฆฌ(๊ฐ๋ฐ์)๊ฐ ์ ๋ณด๋ฅผ ๋ ์ ์ง๋จ ๋ฐ/๋๋ ์ ๊ณตํ ์ ์๋ค๋ฉด ์ด๋ ๋ชจ๋์๊ฒ ์-์(win-win)์ ๋๋ค.
@sebastienros ๋ฅผ ๋ค์ด์ฃผ์ ์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋จํ ๊ฐ์ฌํฉ๋๋ค.
์๋ ๊ทธ๋ฆผ์ ์ํฉ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น?
๋์ผํ ํ๋ ๋ด์์ 4๊ฐ์ WebApp์ ์คํํฉ๋๋ค. ์ด๊ธฐ์๋ B1์ด์๊ณ S2๋ก ํ์ฅ๋์์ผ๋ฉฐ ๋ฐฐ๊ณ ํ webapp csproj๋ก ์ค์ ํ ๋๊น์ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ์ ์ฆ๊ฐํ์ต๋๋ค.
<ServerGarbageCollection>false</ServerGarbageCollection>
๋ํ Application Insights๋ฅผ ๋นํ์ฑํํฉ๋๋ค.
@alexiodan ๊ณผ ๊ฐ์ ์ํฉ์์ microsoft/dotnet :2.1-runtime AS ๊ธฐ๋ฐ์์ Kube์์ ํธ์คํ
๋๋ ์ผ๋ถ IHostedServices๋ฅผ ์คํํ๋ .net core 2.1 ์ฝ์์ด ์์ต๋๋ค. HealthChecks๋ฅผ ํ์ฑํํ๊ธฐ ์ํด HealthChecks ๋ฏธ๋ค์จ์ด๋ง์ผ๋ก asp.net์ ์ถ๊ฐํ๊ณ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ฅผ microsoft/ dotnet:2.1-aspnetcore-runtime์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ๊ฒฐ๊ณผ๋ OOM์ด์์ต๋๋ค. ๋ค์์ ์ถ๊ฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์์ ํํ์ต๋๋ค.
์ฐ๋ฆฌ์ ๋ถ์์ asp.net ์ฑ์์ GC๊ฐ ๋ ์์ฃผ ์์งํ๊ณ Finalizer Queue๋ ๋ ์์ฃผ ํต๊ณผํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
๋ํ ํ์ดํ๋ผ์ธ์ ๋ค์์ ์ถ๊ฐํ์ฌ GC๊ฐ ์ข ๋ฃ์ ๋๊ธฐ์ด์ ์์งํ๊ณ ํต๊ณผํ๋๋ก ๊ฐ์ ํ๋ฉด
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.GC.Collect();
๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์์ ์ ์ผ๋ก ์ ์ง๋์์ต๋๋ค.
์๋ ๊ทธ๋ฆผ์ ์ํฉ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น?
๋์ผํ ํ๋ ๋ด์์ 4๊ฐ์ WebApp์ ์คํํฉ๋๋ค. ์ด๊ธฐ์๋ B1์ด์๊ณ S2๋ก ํ์ฅ๋์์ผ๋ฉฐ ๋ฐฐ๊ณ ํ webapp csproj๋ก ์ค์ ํ ๋๊น์ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ์ ์ฆ๊ฐํ์ต๋๋ค.
<ServerGarbageCollection>false</ServerGarbageCollection>
๋ํ Application Insights๋ฅผ ๋นํ์ฑํํฉ๋๋ค.
- ์์ ์ค์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ดํ ์ ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ณ์?
- ์ ์๋ ํ๋์ ์ ์์ ๋๊น?
์๋ ํ์ธ์ @alexordan
AI(net core 2.1์ ์น ์ฑ)๋ฅผ ์ฌ์ฉํ ๋๋ ๋งค์ฐ ์ ์ฌํ ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ด ํ์๋ฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋ ์ง์ ์ด ์์ต๋๊น? ๋ถ๋ช ํ ์ฐ๋ฆฌ๋ ์ฑ์ AI๋ฅผ ์ ์งํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
์์ฒญํ ๋๋ง๋ค ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ ๊ฒ์ด ์ด์ํ์ง๋ง ์๋ฅผ false๋ก ์ค์ ํ๋ฉด ์ค์ง๋๋ ๊ฒ ๊ฐ์ต๋๊น? true๊ฐ ๊ทธ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฐ์น๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ด์ํ์ง๋ง ๊ทธ ๋ฐ๋์ธ ๊ฒ ๊ฐ์ต๋๋ค...
์ด ์ค๋ ๋์ ์ค๋ช ๋ ๋ฌธ์ ์ ๋ํ ๊ธฐ์ฌ๋ฅผ ์์ฑํ๊ฒ ๋ค๋ ์๋๋ฅผ ๋ฐํํ ์งํ์ ์ค์ ๋ก ์์ฑํ๋ค๋ ์ฌ์ค์ ์ธ๊ธํ๋ ๊ฒ์ ์์์ต๋๋ค. ์ฌ๊ธฐ์์ ๋ณผ ์ ์์ต๋๋ค: https://github.com/sebastienros/memoryleak
์ฐจํธ์ ํจํด์ ์ค์๊ฐ์ผ๋ก ๋ ๋๋งํ๋ ์์ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์์ ๊ฒ์ false๋ก ์ค์ ํ๋ ๊ฒ์ด ๋๋ฅผ ์ํด ์ค์ง๋๋ ๊ฒ ๊ฐ์ต๋๊น? true๊ฐ ๊ทธ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฐ์น๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ด์ํ์ง๋ง ๊ทธ ๋ฐ๋์ธ ๊ฒ ๊ฐ์ต๋๋ค...
ํด๋ผ์ด์ธํธ ๊ฐ๋น์ง ์์ง(๋ง์ ์ฑ๊ณผ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต์ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ ์ ์ง์ ์ต์ ํ๋จ)์ ์๋ฒ ๊ฐ๋น์ง ์์ง(์ฒ๋ฆฌ๋ ๋ฐ ๋์์ฑ์ ์ต์ ํ๋จ)๋ณด๋ค ๋ ๊ณต๊ฒฉ์ ์ ๋๋ค.
SGC๋ฅผ false๋ก ์ค์ ํ๋ฉด ๋ด asp.net ํต์ฌ API๊ฐ 150mb์์ 48mb๋ก ๋จ์ด์ก๊ณ ๊ทธ ์ดํ์๋ ๊ฐ ์์ฒญ์ ๋ฐ๋ผ ์ฆ๊ฐํ์ง ์์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ํ์ฌ๋ก์๋ ์ด๊ฒ์ด ํ๋ก๋์ ์ ๊ฐ์ฅ ์ ํฉํ ์ค์ ์ ๋๊น?
@kgrosvenor ์ค์ ๋ก๋ ๋ค๋ฆ ๋๋ค. ์ฐ์ํ @sebastienros ๊ธฐ์ฌ์์ ์ธ์ฉ:
์ผ๋ฐ์ ์ธ ์น ์๋ฒ ํ๊ฒฝ์์๋ CPU ๋ฆฌ์์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ ์ค์ํ๋ฏ๋ก ์๋ฒ GC๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ํฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ถ ์๋ฒ ์๋๋ฆฌ์ค๋ Workstation GC์ ๋ ์ ํฉํ ์ ์์ต๋๋ค(์: ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๋ฆฌ์์ค๊ฐ ๋๋ ์ฌ๋ฌ ์น ์์ฉ ํ๋ก๊ทธ๋จ์ ํธ์คํ ํ๋ ๊ณ ๋ฐ๋).
๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ๋ช ์ฌํ๊ฒ ์ต๋๋ค. ์ด ์ค๋ ๋๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด ๋ ๋ง์ ์ ๋ฐ์ดํธ๊ฐ ํ์๋ฉ๋๋ค. ์ฆ, ์ ๋ asp.net ์ฝ์ด๋ฅผ ์ ๋์ ์ผ๋ก ์ฌ๋ํฉ๋๋ค. :)
๋ํ .net core 2.1 ์ฝ์ ์ฑ์ผ๋ก ์ด ๋ฌธ์ ๋ฅผ ๊ฒช์ต๋๋ค. ์ง์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฑ์ฅ. ๋์ปค ์ปจํ ์ด๋๋ฅผ ๋ฎ์ ์ต๋๊ฐ์ผ๋ก ์ค์ ํ์ฌ ์ ์คํ๊ณ ๋ค์ ์์ํ๋ฏ๋ก ์ ๋๋ก ์๋ํ์ง๋ง ๋ณด๊ธฐ ํํฉ๋๋ค.
์ด์ชฝ์ ์์์ด ์๋์? ASP.Net Core v2.1์์๋ ๋์ผํ ๋์์ด ์์ต๋๋ค. ์ปค๋ฐ https://github.com/aspnet/AspNetCore/commit/659fa967a1900653f7a82f02624c7c7995a3b786 ์์ ๋ณผ ์ ์๋ฏ์ด v3.0์์ ์์ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฌธ์ ๊ฐ ์์๋ ๊ฒ ๊ฐ์ต๋๊น?
@flo8 2.2๋ก ์ ๊ทธ๋ ์ด๋๋ฅผ ์๋ํ๊ณ ๋์์ ํ์ธ ํ์ต๋๊น? https://dotnet.microsoft.com/download
์ต์ 2.2๋ฅผ ์คํํ๊ณ ์ด ๋ฌธ์ ๋ ์์ต๋๋ค. 100๋ง int ๋ชฉ๋ก์ ๋ง๋ค๊ณ emptyResult()๋ฅผ ๋ฐํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง ๋๊น์ง ์์ฒญ๋ง๋ค ํ์ด ์๋ฐฑ MB ์ฆ๊ฐํฉ๋๋ค. ServerGarbageCollection์ false๋ก ์ค์ ํ๋ฉด ์ฌ๋ฐ๋ฅธ ์์ ์ด ์๋ ๊ฒ ๊ฐ์ง๋ง...
@dre99gsx ์ฝ๊ฒ ์ฌํํ ๊ฒ ๊ฐ์ผ๋ ๋ก์ปฌ์์ ๋์ผํ ์์ ์ ์ํํ ์ ์๋๋ก ํ๋ก์ ํธ์ ๋จ๊ณ๋ฅผ ๊ณต์ ํด ์ฃผ์๊ฒ ์ต๋๊น?
์ด ๊ฒฝ์ฐ LOB๋ฅผ ์ฑ์์ผ ํ์ง๋ง gen2์์ ์์งํด์ผ ํฉ๋๋ค. ๋ํ ์ด๊ฒ์ ์ฌํํ ์ ์๋ ํ๊ฒฝ, OS, ๋ฉ๋ชจ๋ฆฌ, ๋ก๋๋ฅผ ๊ณต์ ํ์ญ์์ค.
์ ๋งคํ ๋ต๋ณ ์ฃ์กํฉ๋๋ค. ๊ฝค ์ฌ์ด:
(Windows 7 64๋นํธ, 16GB ๋จ, http ์์ฒญ์ฉ Google ํฌ๋กฌ, VS2017 ์ปค๋ฎค๋ํฐ) - ์ด ์ค๋ ๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ ํ ์ต์ํด์ง๊ณ ์์ต๋๋ค.
์ด์ 8์ด๋ง๋ค ์์ ์ ํธ์ถํ๊ณ ํ๋กํ์ผ๋ฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ๋ผ๊ฐ๋ ๊ฒ์ ์ง์ผ๋ณด์ญ์์ค. ๋ด ์์คํ ์์ Private Bytes์์ ๋ณผ ์ ์๋ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์์: 155MB
์ฒซ ๋ฒ์งธ http ์์ฒญ ๋ฐ๊ธฐ: 809MB
๋ ๋ฒ์งธ: 1.2GB
3์: 1.4GB
4์: 1.8GB
5์: 2.1GB... 2.3GB.. 2.6GB...
์ด์ ์ด๋ ์์ ์์ GC๊ฐ ์์๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ด ์์์๋ 3GB ์๋๋ก ๋จ์ด์ง์ง ์์ต๋๋ค. ์ธ๊ธํ๋ฏ์ด ServerGC๋ฅผ false๋ก ์ค์ ํ๋ฉด 1GB ์ด์์ผ๋ก ์ฌ๋ผ๊ฐ์ง ์์ง๋ง ์ฌ์ ํ ์ฌ๋ผ๊ฐ์ 1GB์ ๋จธ๋ฌผ๊ณ ์์ต๋๋ค.
๋์์ด ๋๋์ง, ์ฌํํ ์ ์๋์ง ์๋ ค์ฃผ์ญ์์ค. ์ค, ๋๋ ๋น์ ์ github ๊ฒ์๋ฌผ์ ์ฝ์์ต๋๋ค: "ASP.NET Core์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ํจํด", ํ์์ ์ธ ๊ธ, ๊ธฐ๊ณ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
@dre99gsx ๐
๋๋ ์ฌ์ ํ ์ด๋ฌํ ์ค๋ ๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์ต์ํด์ง๊ณ ์์ต๋๋ค.
๋ฌธ์ ๊ฐ ์ ํ ์์ต๋๋ค :) ์ง๋ฌธ: ์ ์ฒด ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ GitHub (๋ฌด๋ฃ ์ ์ฅ์) ๋๋ ์ ์ฌํ ๊ณณ์ ์ค์ ๋ก ์ฌ๋ฆด ์ ์์ต๋๊น? ๊ทธ๊ฒ์ ๋ค๋ฅธ ์ฌ๋์ด ๋น์ ์ด ๊ฐ์ง๊ณ ๋์๋ _์ ์ฒด_ ์ ํํ ์ํ ์ฑ/๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒ ๋ณต์ /๋ค์ด๋ก๋ํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ํ TaskManager
๋ฅผ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์คํฌ๋ฆฐ์ท์ด ๋์์ด ๋ฉ๋๋ค(Windows์ ๊ฒฝ์ฐ - ๋๋ *nix์ ๊ฒฝ์ฐ .. top
๋ช
๋ น ??)
์ง๊ธ๊น์ง ๋๋จํ ๋ ธ๋ ฅ!
/me๋ ์กฐ์ฉํ ์ด ์ค๋ ๋๋ฅผ ์ง์งํ๊ฒ ์์ฒญํ๋ ๊ฒ์ผ๋ก ๋์๊ฐ๋๋ค.
https://github.com/sebastienros/memoryleak ์ค๋ ๋์ ์ค๋ช ๋ ๋ชจ๋ ์ฆ์์ ๋ํ ์ผ๋ถ ๋ฐ๋ชจ ๋ฐ ์ค๋ช ์ ๋ณผ ์ ์๋ค๋ ์๋ฆผ
๋ํ ์ด๋ฌํ ๊ฐ ๋ฌธ์ ๋ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌ๋์์ผ๋ฉฐ dotnet core __์ง๊ธ๊น์ง__์์ ๋ฒ๊ทธ๋ก ์ ์ฆ๋ ๊ฒ์ ์์ง๋ง ์์๋๋ ๋์์ ๋๋ค.
@dre99gsx ์ด์ ์ต๊ทผ ๋๊ธ๋ก ๋์๊ฐ์ ์ด ์ค๋ ๋์ ๋ณ๋์ ๋ฌธ์ ๋ฅผ ์ ์ถํ ๊ฒ์ ์ด๊ตฌํฉ๋๋ค. ๋ด ์ ํ์ ๋๋ ๊ทธ๊ฒ์ด "์ด๊ฒ"์ด๋ผ๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ์ต๋๋ค ;). ๊ทํ์ ์ฒซ ๋ฒ์งธ ์๊ฒฌ์์ ๊ทํ๋
๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๋๊น์ง
๊ทธ๋์ ๋๋ OutOfMemory ์์ธ๋ฅผ ์์ํ ๊ฒ์ด๊ณ , ์ด๊ฒ์ด ๋ด๊ฐ ์ฌํ์ ์์ฒญํ ์ด์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์ ์๊ฒฌ์์ ๋ค์๊ณผ ๊ฐ์ด ๋งํฉ๋๋ค.
์ด์ ์ด๋ ์์ ์์ GC๊ฐ ์์๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ด ์์์๋ 3GB ์๋๋ก ๋จ์ด์ง์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ๋ง์ ์ฝ์ด์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง์ ์์คํ ์์ ์ผ๋ฐ์ ์ ๋๋ค. GC๋ ๊ด๋ฆฌ๋๋ ํ์ ํด์ ํ์ง๋ง ์ปค๋ฐ์ ์ทจ์ํ ์ด์ ๊ฐ ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ๋ ์ฌ์ ํ ์ปค๋ฐ๋ฉ๋๋ค(์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง์). ์ด๊ฒ์ .NET์ ํ์ค ๋์์ด๋ฉฐ ๋ด๊ฐ ์ง์ ํ ๊ธฐ์ฌ์์ ์ด๋ฅผ ์์ฐํฉ๋๋ค. https://blogs.msdn.microsoft.com/maoni/2018/11/16/running-with-server-gc-in-a-small-container-scenario-part-0/ ๋ ์ฝ์ ์ ์์ต๋๋ค.
๋ฐํ์ ํ์ ํ์ฌ ์ปจํ ์ด๋์์ ์คํ๋๋ .NET ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ฐ๊ตฌ ์ค์ด๋ฏ๋ก ์ผ๋ถ ๋ง์ดํฌ๋ก์๋น์ค ์๋๋ฆฌ์ค๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด 3.0์ ๋์์ผ๋ก ํ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ค๋ก ์์๋ธ ๊ฒ์ฒ๋ผ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์๋ฒ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉด ์ํฌ์คํ ์ด์ GC ๋ชจ๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ง์ต๋๋ค. "๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ"์ด๋ผ๊ณ ๋งํ์ ๋ Windows Private Working Set(์์ ๊ด๋ฆฌ์)๋ฅผ ํตํด ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ฐ์ ์ผ๋ก ๋ณด๊ณ ์๋ ๊ฒ์ ๋๋ค. "๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์์ธ"๊ฐ ์๋๋๋ค.
๋น์ ์ด ์ณ๋ค. ์ด๊ฒ์ ์์๋๋ ๋์๊ณผ ์ ์ ๋ ์ ์ฌํด์ง๋ฉฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋ฌด ๋ง์ผ๋ฉด ๋ค๋ฅธ ์ฌ๋์ด ํ์๋ก ํ์ง ์๋๋ฐ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น! ์๊ฒ ์ด. ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ ํ๋์ง ์๋๋ก GC๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ ์ ์์ ๋งํผ ๋๋ํ ํ ์ ๋ ๊ทธ๋๋ก ์ ์งํ๊ณ ์ ์ญํ ์ ํ๋๋ก ํ ๊ฒ์ ๋๋ค. ๋ค์ ํ๋ฒ ๊ฐ์ฌํฉ๋๋ค!
๋๋ Asp.net core 2.2์์ ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ์ผ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ๋ฆด๋ฆฌ์ค์ ๊ด๋ จ๋ ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค.
๊ฐ ํธ์ถ์ ํด์ ๋์ง ์์ ๋๋ง๋ค 40-50Mb ๋ฒ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
๋ํ ์ธ๊ธ๋ ํ๊ทธ ServerGarbageCollection>false ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
50๋ช
์ ์ฌ์ฉ์์ ๋ํด ์ฌ์ ํ ๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ผ๋ฉฐ In-Process ๋ชจ๋์์ ์ฝ 2GB RAM์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค(w3wp iis ์์
์ ํ๋ก์ธ์ค)
๋์์ฃผ์ธ์.
๋์์ฃผ์ธ์ !! ankitmori14
์ ๋์ผํ ๋ฌธ์
@ankitmori14 , @ikourfaln - https://github.com/aspnet/AspNetCore/issues/1976#issuecomment -449675298์์ @sebastienros ์ ์๊ฒฌ์ ์ฝ์์ง๋ง ์ฌ์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐ๋๋ฉด ์ ๋ฌธ์ ๋ฅผ ์ ์ถํ์ธ์. ๋ฌธ์ ๋ฅผ ์ฌํํ๊ธฐ ์ํ ์์ธํ ๋จ๊ณ์ ํจ๊ป ํด๋น ๋์์ ๋ํ ๊ธฐํ ์ ๋ณด ๋ฐ ์ถ์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฑ/ํ๋ก์ธ์ค์ ์ค์ ๋ก ์ค๋ฅ๊ฐ ์์ง ์๋ ํ ๋ฒ๊ทธ๊ฐ ์์ ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ์์ต๋๋ค(๊ทธ๋ฌ๋ ๋ถ๊ฐ๋ฅํ์ง๋ ์์). ๊ธฐ๋ณธ '์๋ฒ' ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๊ฐ๋ฅํ ์ต์ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ์ง ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ ๋ก ๋ถ์กฑํ ๋์ ๊ฐ์ด ํ์ํ ๋ ์์๋ฉ๋๋ค. ๋ฐ๋ผ์ ์์ ์ฑ์ด๋ผ๋ 2GB ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ฌ์ ํ 4GB์ ์ฌ์ ๊ณต๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
์๋ ,
์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค: https://stackoverflow.com/questions/53868561/dotnet-core-2-1-hoarding-memory-in-linux
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ ๊ตฌ์ฑ๋ ์ ํ 512Mb์ ๋๋ฌํ๊ธฐ ๋๋ฌธ์ Kubernetes๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ข ๋ฃํ ๋๊น์ง ํ๋ก์ธ์ค์์ ๋ฉฐ์น ๋์ ์ฆ๊ฐํฉ๋๋ค. ํฅ๋ฏธ๋กญ๊ฒ๋ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์์ํ๊ฑฐ๋ ๋ค๋ฅธ ์์ ์์ด ๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ์ํํ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ธ๊ฒฉํ ๋จ์ด์ก์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ์กฐ์ฌํ๋ฉด์ ๋ฃจํธ๊ฐ ์๋ ๋ง์ ๊ฐ์ฒด๋ฅผ ๋ณด์์ต๋๋ค.
์ด์ ๋์ GC(์ฆ, ๋ฐฑ๊ทธ๋ผ์ด๋ GC)๋ ๋นํ์ฑํํ๊ณ ์ง๊ธ์ ๋ ์ข์ ๋ณด์ด์ง๋ง ํ์ธํ๋ ค๋ฉด ์ ์ด๋ ์ผ์ฃผ์ผ์ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
<PropertyGroup>
<ServerGarbageCollection>false</ServerGarbageCollection>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>
@vtortola ์ง๋ฌธ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด 512Mb ์ ํ์ ๊ตฌ์ฑํ ๋ ์ฒ๋ฆฌํ๋ ค๋ ๋์ ์์ฒญ ์์ ๋ํ ์์ด๋์ด๊ฐ ์์๊ฑฐ๋ ์ฑ์ด ๋์ด์ง๊ธฐ ์ ์ ์ฒ๋ฆฌํ ์ ์๋ ๋์ ์์ฒญ ์๋ฅผ ํ ์คํธํ์ต๋๊น?
์ฐ๋ฆฌ๋ ๋ช ๊ฐ์ง ์๋น ๋ฐ ๋๋ต์ ์ธ ํ ์คํธ๋ฅผ ์ํํ๊ณ 512Mb๋ฅผ ์ฌ์ฉํ์ฌ ํฌ๋๋น 500๊ฐ์ ๋์ ์น ์์ผ์ ์ฒ๋ฆฌํ ์ ์๋์ง ํ์ธํ์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ 150Mb ๋ฏธ๋ง์ธ ์ํ์์ 2๊ฐ์ ํฌ๋์ 1000๊ฐ์ ๋์ ์ฐ๊ฒฐ๋ก ๋ช ์๊ฐ ๋์ ์คํํ์ต๋๋ค. 2๊ฐ์ ํฌ๋๊ฐ ์๋ ๋ฐฐํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ 150~300๊ฐ์ ๋์ ์ฐ๊ฒฐ์ ๊ฐ์ง๋ฉฐ ๋ฉ๋ชจ๋ฆฌ๋ ์ฒ์ ๋ฉฐ์น ๋์ 100Mb ๋ฏธ๋ง์์ ์ฝ 2์ฃผ ํ์ 512Mb์ ๋๋ฌํ ๋๊น์ง ๋ค์ํฉ๋๋ค. ์ฐ๊ฒฐ ์์ ์ฌ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์๋ ์๊ด ๊ด๊ณ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ๊ฒฐ์ 70% ์ด์์ด 10๋ถ ๋์ ์ง์๋ฉ๋๋ค.
100MB์ 512MB์ผ ๋ ๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ๊ณต์ ํ์ฌ ์ด๋ค ์ธ์คํด์ค๊ฐ ์์ง ์ด์ ์๋์ง ํ์ธํ ์ ์์ต๋๊น?
์ฟ ํค, ํ ํฐ ๋ฐ ๋ง์ ๊ฐ์ธ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์ผ๋ฏ๋ก ๋คํ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ํ์ง์์ ๋น๊ตํ ์ ์์ต๋๊น? ์ด๋ค ๊ฐ์ฒด๊ฐ ๊ฐ์ฅ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋์ง, ๊ทธ๋ฆฌ๊ณ ํด๋น ๊ฐ์ฒด์ ์๊ฐ ๋ถํ์ ์๊ด ๊ด๊ณ๊ฐ ์๋์ง ์ฌ๋ถ์ ๊ด๋ จํ์ฌ. 300๊ฐ์ ์ฐ๊ฒฐ์ด ์๋ ๊ฒฝ์ฐ 3K ์ฐ๊ฒฐ ๊ฐ์ฒด๊ฐ ์์ด์ผ ํฉ๋๋ค.
๋ถํํ๋ <ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
์ค์ ํ
์คํธ๋ ๋์์ด ๋์ง ์์๊ณ ํ๋ก์ธ์ค๊ฐ ์ฌ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋น์ถํ๊ณ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ํ๋ก์ธ์ค์ Linux ๋คํ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ด๋ฅผ ๋ถ์ํด์ผ ํ๋ ์ ์ผํ ๋๊ตฌ๋ lldb์ด๊ณ ์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ์ ๋ํด ๋งค์ฐ ๋ฉ์ฒญํฉ๋๋ค.
๋ฒจ์ด ์ธ๋ฆด ๊ฒฝ์ฐ์ ๋๋นํ ๋ช ๊ฐ์ง ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(lldb) eeheap -gc
Number of GC Heaps: 1
generation 0 starts at 0x00007F8481C8D0B0
generation 1 starts at 0x00007F8481C7E820
generation 2 starts at 0x00007F852A1D7000
ephemeral segment allocation context: none
segment begin allocated size
00007F852A1D6000 00007F852A1D7000 00007F853A1D5E90 0xfffee90(268430992)
00007F84807D0000 00007F84807D1000 00007F8482278000 0x1aa7000(27947008)
Large object heap starts at 0x00007F853A1D7000
segment begin allocated size
00007F853A1D6000 00007F853A1D7000 00007F853A7C60F8 0x5ef0f8(6222072)
Total Size: Size: 0x12094f88 (302600072) bytes.
------------------------------
GC Heap Size: Size: 0x12094f88 (302600072) bytes.
๊ทธ๋ฆฌ๊ณ dumpheap -stat
์ ๊ฒฐ๊ณผ : https://pastebin.com/ERN7LZ0n
https://stackoverflow.com/questions/53868561/dotnet-core-2-1-hoarding-memory-in-linux ์์ Grafana๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ํ๋ฅผ ๋ณด๊ณ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์น ์์ผ์ ์ฌ์ฉํ์ง ์์ง๋ง ์๋ฒฝํ๊ฒ ์๋ํ๋ dotnet ์ฝ์ด์ ๋ ๋ค๋ฅธ ์๋น์ค๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
@vtortola ๋ ์ด ๋ฌธ์ ๋ฅผ ๋ถ๊ธฐํ์ง ์๋๋ก ์ ๋ฌธ์ ๋ฅผ ๋ง๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น? WebSocket์ ์ฌ์ฉํ๋ค๋ ์ฌ์ค์ด ๊ทธ๊ฒ์ ๋ ํนํ๊ฒ ๋ง๋ ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ ์ด๋ ๋น์ ์ฒ๋ผ ๋์ํ๊ณ ์ฅ๊ธฐ๊ฐ์ ๊ฑธ์ณ ์คํธ๋ ์ค๋ฅผ ์ฃผ๋ ์ํ ์ฑ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์น ์์ผ์ผ๋ก ๋ฌด์์ ํ๋์ง, ์น ์์ผ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ๊ณผ ์๊ฐ์ ์ค๋ช ํ ์ ์์ต๋๊น? ์ด์ ๊ฐ์ ์ฑ์ ์ค์ ํ๊ณ ๋ฉฐ์น ๋์ ์คํํ ์ ์์ผ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฆ๊ฐํ๋ ๊ฒ์ ๋ณด๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
๋ํ GC๊ฐ ํฌ๋ ์ ํ์ ๊ฐ๊น๋ค๋ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์ง ์๋ ๋ฐฉ์์ผ๋ก GC์ Kubernetes ๊ฐ์ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
@richlander ๋ ๋น์ทํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. Rich๋ ์ด ๊ฒฝ์ฐ(๋ง์ง๋ง 6๊ฐ์ ๋๊ธ๋ง ์ฝ์ผ์ญ์์ค)๊ฐ ํ์ฌ ์์ ์ค์ธ ์์ ๊ณผ ๊ด๋ จ๋ ์ ์์ต๋๊น?
์ฐจ์ด๊ฐ ์๋ ๊ฒฝ์ฐ ๋์ผํ(๋๋ ๋งค์ฐ ์ ์ฌํ) ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋์ปค์์ ์คํ๋๋ 12๊ฐ ์ด์์ .net ์ฝ์ด 2.1 ๋ฐ 2.2 ์ฝ์ ์ฑ์ด ์์ต๋๋ค. ๊ฐ ์ปจํ ์ด๋์๋ 512mb ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ์๊ณ ์น ์์ผ(ํด๋ผ์ด์ธํธ)๋ ์ฌ์ฉํ๋ฉฐ ์ฑ์ ~3์ผ๋ง๋ค ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋๋ฌํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋๊ณ ๋ค์ ์์๋ฉ๋๋ค.
๋ชจ๋ ๊ฒ์ด ์ธ์ฆ๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ์ ๊ณตํ ์ ์์ง๋ง ํ ์คํธ ์ฌ์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ์ฌํํ๋ ๋ฌด์ธ๊ฐ๋ฅผ ์กฐํฉํ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ ํ์ ์ค์ ํ๊ธฐ ์ํด ์ด๋ค ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๊น? ๊ทธ๋ฅ --memory
๋๋ --memory-swap
?
ํ ์คํธํ ๋ 16MiB์ ๊ฐ์ ์ด์ ํ๋์์๋ ๋ด๊ฐ ์ค์ ํ ํ๋๋ฅผ ์ด๊ณผํ์ง ์๊ณ ์์ฃผ ์ ๊ณ ๋ ค๋์์์ ์ ์ ์์ง๋ง ๋์คํฌ์์ ๋ฏธ์น ๋ฏ์ด ์ค์๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ db ์ฟผ๋ฆฌ(EF) ๋ฐ Razor ๋ณด๊ธฐ ๋ ๋๋ง์ ์ํํ๋ ์ฑ์ผ๋ก ํ ์คํธํ๊ณ ์์ต๋๋ค.
@sebastienros ์ ๋์ ์ผ๋ก, ๋๋ https://github.com/aspnet/AspNetCore/issues/6803 ์ ๋ง๋ค์์ต๋๋ค.
์ถ๊ฐ ์ ๋ณด๊ฐ ํ์ํ๋ฉด ์๋ ค์ฃผ์ญ์์ค.
ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์์ต๋๋ค.
ํ๋ก๋์ ์์ ํ ์๊ฐ ํ์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ w3wp.exe ํ๋ก์ธ์ค(.NET Core InProcess ์คํ)์์ ์ฌ์ฉ๋ฉ๋๋ค. GC๋ฅผ Workstation์ผ๋ก ๋ณ๊ฒฝํด๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋คํ๋ฅผ ๋ถ์ํ ํ ์ด์ ์ ์ฌํ ๋ฌธ์ ( https://github.com/aspnet/AspNetCore/issues/6102)๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ต์ .NET Core ๋ฐํ์(ํ์ฌ 2.2.3)์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ํ ์ค๋ ๋์ค์ ํ๋ก๋์ ์์ ํ ์คํธํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ด๋ป๊ฒ ๋๋์ง ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ด Linux ์ปจํ ์ด๋์ ์ ํ์ ์ค์ ํ๋ฉด OOM์ด ๋ ๋นจ๋ผ์ง๋๋ค. Visual Studio์ ๊ธฐ๋ณธ ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ํฉ๋๋ค. ๋ด๊ฐ ์ฐพ์ ํ ๊ฐ์ง - Core 2.1 ๋ฐ 2.2๊ฐ ์ํฅ์ ๋ฐ์ต๋๋ค. Core 2.0์ ์๋์ง๋ง EOL์ ๋๋ค :(
์ ์ฐธ์กฐ
๋ฐํ์ ํ์ ํ์ฌ ์ปจํ ์ด๋์์ ์คํ๋๋ .NET ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ฐ๊ตฌ ์ค์ด๋ฏ๋ก ์ผ๋ถ ๋ง์ดํฌ๋ก์๋น์ค ์๋๋ฆฌ์ค๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด 3.0์ ๋์์ผ๋ก ํ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ค๋ก ์์๋ธ ๊ฒ์ฒ๋ผ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์๋ฒ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉด ์ํฌ์คํ ์ด์ GC ๋ชจ๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ฌํ๊ฒ๋ ์ํฌ์คํ ์ด์ ๋ชจ๋๋ ์ ํ ๋์์ด ๋์ง ์์ต๋๋ค. ์ฌํ๊ฒ๋ ์ ๋ 3.0 ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ์๋ํ ์์น์ ์์ง ์์ต๋๋ค.
@PrefabPanda System.Runtime.GCSettings.IsServerGC
์ด false
์ธ์ง ํ์ธํ์ฌ ์ค์ ๋ก ์ํฌ์คํ
์ด์
GC ๋ชจ๋์์ ์คํ ์ค์ธ์ง ํ์ธํ์ญ์์ค.
๊ทธ๋ ๋ค๋ฉด ์ด๊ฒ์ ์ง์ ํ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ ์ ์์ต๋๋ค. ๋ณ๋์ ๋ฌธ์ ๋ฅผ ์ฌ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋จ๊ณ์ผ ์ ์์ต๋๋ค.
@wanton7 - ๊ฐ์ฌํฉ๋๋ค. ๋ค์ ํ์ธํ๋๋ฐ ํ์คํ ์ค์ ๋์์ต๋๋ค.
@DallanCarr - ํ ๊ฒ์ ๋๋ค
๋๋ ๊ทธ๊ฒ์ด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๋๋ผ๊ณ ๊ฑฐ์ ํ์ ํฉ๋๋ค. Docker ์ค์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ฉ๋์ง ์์ ์ ์์ผ๋ฉฐ ํ๋์ ๋๋ฌํ๊ธฐ ์ ์ GC๊ฐ ์์๋์ง ์์ต๋๋ค. ๋๋ 3.0์ด ์ด๋ฐ ์๋ฏธ์์ ์์ ์ฌํญ์ ๋์ ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
@richlander ์ด ๋ฌธ์ ๊ฐ 2.2์์ ์๋ํ์ง ์๋ ๊ฒ์ผ๋ก ์๋ ค์ง ๋ฌธ์ ์ฒ๋ผ ๋ณด์ ๋๊น?
@PrefabPanda ์ฌ์ฉ ์ค์ธ ์ ํํ ๋์ปค ๋ฒ์ ๊ณผ ๋์ปค ์์ฑ ํ์ผ์ ๊ณต์ ํด ์ฃผ์๊ฒ ์ต๋๊น? ์ฌํํ๋ ค๊ณ ํ์ง๋ง docker์ docker-compose ๋ฒ์ ๊ฐ์ ์ด ๋ฌธ์ ๋ฅผ ๋ก์ปฌ๋ก ๋ณต์ ํ๋ ๋ฐ ์ด๋ ค์์ด ์์ต๋๋ค.
@sebastienros , @richlander - ๋ค์ ์ฐพ์์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ ๋ง ๊ฐ์ฌ.
๋ด Docker ๋ฒ์ :
๋์ปค ๋ฐ์คํฌํฑ ์ปค๋ฎค๋ํฐ
๋ฒ์ 2.0.0.2(30215)
์์ง: 18.09.1
์์ฑ: 1.23.2
์ฒจ๋ถ๋ ์ ์ฒด ํ
์คํธ ํ๋ก์ ํธ ์ฐธ์กฐ:
WebApplication1.zip
๋ง์ผ์ ๋๋นํ์ฌ ๋ด Dockerfile:
mcr.microsoft.com/dotnet/core/aspnet:2.2 AS ๊ธฐ๋ฐ์์
WORKDIR /์ฑ
๋
ธ์ถ 80
๋
ธ์ถ 443
mcr.microsoft.com/dotnet/core/sdk:2.2 AS ๋น๋์์
์์
๋๋ ํ ๋ฆฌ /src
๋ณต์ฌ ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
dotnet ๋ณต์ "WebApplication1/WebApplication1.csproj" ์คํ
๋ณต์ฌ . .
์์
๋๋ ํฐ๋ฆฌ "/src/WebApplication1"
dotnet ๋น๋ "WebApplication1.csproj" ์คํ -c ๋ฆด๋ฆฌ์ค -o /app
FROM ๋น๋ AS ๊ฒ์
RUN dotnet publish "WebApplication1.csproj" -c ๋ฆด๋ฆฌ์ค -o /app
FROM ๋ฒ ์ด์ค AS ์ต์ข
WORKDIR /์ฑ
๋ณต์ฌ --from=๊ฒ์ /app .
ENTRYPOINT ["๋ท๋ท", "WebApplication1.dll"]
docker-compose.yml:
๋ฒ์ : '2.4'
์๋น์ค:
์น ์ ํ๋ฆฌ์ผ์ด์
1:
์ด๋ฏธ์ง: ${DOCKER_REGISTRY-}์น ์ ํ๋ฆฌ์ผ์ด์
1
mem_reservation: 128m
mem_limit: 256m
memswap_limit: 256m
CPU: 1
์ง๋ค:
๋ฌธ๋งฅ: .
dockerfile: WebApplication1/Dockerfile
docker-compose-override.yml:
๋ฒ์ : '2.4'
์๋น์ค:
์น ์ ํ๋ฆฌ์ผ์ด์
1:
ํ๊ฒฝ:
- ASPNETCORE_ENVIRONMENT=๊ฐ๋ฐ
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_HTTPS_PORT=44329
- DOTNET_RUNNING_IN_CONTAINER=์ฐธ
- DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=์ฐธ
- ASPNETCORE_preventHostingStartup=true
ํฌํธ:
- "50996:80"
- "44329:443"
๋ณผ๋ฅจ:
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/ https:ro
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/us ersecrets:ro
@sebastienros - GC๊ฐ ๋ณด๋๋ก ๋ณ๋์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ปจํ ์ด๋์ ๋ฃ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋๋ผ๋ ์ ์๊ฒ ์ ์๋ํฉ๋๋ค.
๋ช ์์ ์ผ๋ก ํธ์ถํ๋ ค๊ณ ์๋ํ์ง๋ง ๋์์ด ๋์ง ์์ต๋๋ค. ์ฝ๋์์ ํธ์ถํ๋๋ผ๋ ์ปจํ ์ด๋/๋จธ์ ์ ์๋ชป๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ ์ฌ์ ํ ํ์๋๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
@PrefabPanda ๊ฐ "๋ช ์์ ์ผ๋ก ํธ์ถํ๋ ค๊ณ ์๋ํ์ต๋๋ค"๋ผ๊ณ ๋งํ์ ๋ ์ ํํ ๋ฌด์จ ๋ป์ธ์ง ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น? GC๋ ์์ฐ์ ์ผ๋ก ํธ๋ฆฌ๊ฑฐ๋์๋์ง ์ ๋๋์๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ง์ ๋ ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ์๋ ๊ฒฝ์ฐ ์ฌ๋ฐ๋ฅธ ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ํ์ธํฉ๋๋ค. GC.Collect()๋ฅผ ํธ์ถํ๋ฉด ์ ์ฒด ์ฐจ๋จ ์ปฌ๋ ์ ์ ์ํํฉ๋๋ค. GC.Collect(2, GCCollectionMode.Default, true, true) ๋ฅผ ์ํํ๋ฉด ์ ์ฒด ์์ถ GC๋ฅผ ์ํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ปจํ ์ด๋ ์ ํ์ด๋ ๋ค๋ฅธ ๊ฒ์ ๊ด๊ณ์์ด ํ์ด ๊ฐ๋ฅํ ๊ฐ์ฅ ์์ ํฌ๊ธฐ๋ก ๋ฐํ๋ฉ๋๋ค.
์๋ ํ์ธ์ @Maoni0 - GC.Collect(2, GCCollectionMode.Default, true, true)๋ฅผ ์๋ํ์ต๋๋ค.
256MB๋ 2.2์์๋ ๋๋ฌด ์์ง๋ง 3.0์์๋ '๊ณ ์ '๋ ์ ์๋ค๋ ๋ ๋ค๋ฅธ ์๊ฒฌ์ ๋ณด์์ต๋๋ค. ์ข ๋ ์คํ์ ํด๋ด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค...
GC.Collect(2, GCCollectionMode.Default, true, true)๋ฅผ ์๋ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์๋๋ก ๊ฐ์ํ์ง ์์ผ๋ฉด ์ค์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๋ค๋ ์๋ฏธ์ ๋๋ค. ๊ทํ์ ํ๊ฒฝ์์ ์ผ๋ง๋ ๋ง์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ํ์คํ์ง ์์ต๋๋ค. sos ๋ช ๋ น์ ์ ํ ์คํํ ์ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ ๋๋ GC ํ์ ํ์ ๋ฌด์์ด ๋จ์ ์๋์ง ํญ์ ํ์ธํ ์ ์์ต๋๋ค.
@Maoni0 ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. Visual Studio์์ ํ ํ๋ฆฟ์ ์ฌ์ฉํ๊ณ ์์์ ๋ช ์ฌํ์ญ์์ค. ๋ง ๊ทธ๋๋ก ๋ด๊ฐ ์ฒจ๋ถํ ์ด ํ ์คํธ ํ๋ก์ ํธ์๋ ๋ด ์ฝ๋๊ฐ ์์ต๋๋ค. ํด๊ฒฐํด์ผ ํ ๋ค๋ฅธ ํผ๋๋ฐฑ์ด ์์ต๋๋ค. ์ฐ๋ฝ๋๋ฆฌ๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
@Maoni0 - ๋ ๋์ ํ๋๋ฅผ ์ค์ ํ๋ ค๊ณ ์๋ํ์ง๋ง ์ฐจ์ด๊ฐ ์์์ต๋๋ค. 3.0 ํ๋ฆฌ๋ทฐ ํด๋ด์ผ ์๋ฏ
์ด ๋ฌธ์ ๋ ๋ชจ๋ ์ฌ๋ก๊ฐ ๋ณ๋์ ๋ฌธ์ ๋ก ์ฒ๋ฆฌ๋ ์์ฃผ ์ค๋๋ ๋ฌธ์ ์ด๋ฏ๋ก ์ด ๋ฌธ์ ์ ๋ํ ์๊ฒฌ์ ์ ๊ทธ๊ณ ์ถ์ต๋๋ค. https://github.com/aspnet/AspNetCore/issues/10200 ์ ๋๊ธ์ ๋ฌ๊ณ ์๋ค๊ณ ์๊ฐํ์ฌ ์ค์๋ก ์ด๊ฒ์ ๋๊ธ์ ๋ฌ์์ต๋๋ค.
๊ฐ์ฌ ํด์
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ๋ํ ์์์ด ์์ต๋๊น? ๋๋ Net Framework๋ฅผ ํตํด Core 2๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ ์ด๊ฒ์ ์ฌ์ ํ โโโโ๋ฐ์ํฉ๋๋ค. _Controller_๋ฅผ ํธ์ถํ ๋๋ง๋ค ์ฌ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฆ๊ฐํ์ง๋ง ๊ฒฐ์ฝ ์ค์ด๋ค์ง ์์์ต๋๋ค. (_WebApi ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ต๋๋ค_)