Thread Pool์ ์ด์ด์ง๋ ๊ธ์ด๋ค.
https://github.com/teamsmiley/gitbook-sample/tree/main/ThreadTestarrow-up-right
entity framework sample code
๋๋ mysql๋ก ์ฒ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค. test๋๋น๋ฅผ ๋ง๋ค๊ณ blogํ
์ด๋ธ์ ๋ง๋ค์๋ค ํญ๋ชฉ์ url์ด ํ๋ ์๋ค.
Copy dotnet add package Pomelo.EntityFrameworkCore.MySql --version 6.0.2
vi ValuesController.cs
Copy using var connection = new MySqlConnection ( " server=192.168.1.21;User ID=root;Password=root;database=test; " );
connection . Open ();
using var command = connection . CreateCommand ();
command . CommandText = " DO SLEEP(10);SELECT Url FROM Blogs; " ;
using var reader = command . ExecuteReader ();
while ( reader . Read ())
{
var url = reader . GetString ( 0 );
System . Console . WriteLine ( $" blog url { url } " );
}
// Thread.Sleep(1000000); // Sleep for 10 seconds
Console . WriteLine ( " Thread completed. go back to the pool. " ); ์ฝ๋๋ฅผ ์คํํ๊ณ locust๋ฅผ ์คํํ์๋ง์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
que๊ฐ ๊ณ์ ์ฌ๋ผ๊ฐ๋ค.
๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก dbcontext๋ connection pool์ ์ฌ์ฉํ์ง ์๋๋ค.
https://learn.microsoft.com/en-us/ef/core/performance/advanced-performance-topics?tabs=with-di%2Cexpression-api-with-constant#dbcontext-poolingarrow-up-right
AddDbContextPool๋ฅผ ์ฌ์ฉํด์ผํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก connection pool์ 1024๊ฐ์ ํ์ ๋ง๋ ๋ค. ์ด๊ฒ์ ์ค์ ์ ํตํด์ ๋ณ๊ฒฝํ ์ ์๋ค.
ํ
์คํธ ๊ฒฐ๊ณผ mysql์ max_connection ๊ฐฏ์๋ณด๋ค ๋ง์ผ๋ฉด thread๊ฐ ์ฃฝ๋๊ฒ์ ์์์๋ค
102๊ฐ ์ด์์ ์ปค๋ฅ์
์ ์๋ฐ๋๊ฑธ ์์ ์๋ค.
api๋ error๋ฅผ ๋ณด๋ธ๋ค.
api๋ฅผ ๋ฉ์ถ์.
๊ทธ๋ฌ๋ ํ์ฌ ์ฐ๊ฒฐ๋ ๊ฐฏ์๋ ์ค์ด๋ค์ง ์๋๋ค.
์ด๊ฒ์ mysql์ wait_timeout์ด 8์๊ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค. 8์๊ฐ์ด ์ง๋๋ฉด ์ค์ด๋ค๋ ค๋.
๊ฒฐ๊ณผ์ ์ผ๋ก connect์ ๊ณ์ ๋๋ฆฌ๋ฉด ๋ฌธ์ ๊ฐ ๋๋ค. ๋๋น๋ฅผ ์ฌ์์ํด์ผํ๋๊ฒฝ์ฐ๊น์ง ์๊ธธ์ ์๋ค.
์ฝ๋๋ฅผ ์์ ํด๋ณด์.
๋ฌธ์ ์์ด ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๊ณ connect๋ ๋ง์ด ์ถ๊ฐ๋์ง ์๋๋ค
๊ฒฐ๋ก ์ ์ฟผ๋ฆฌ๊ฐ ๋๋๋ฉด ์ปค๋ฅ์
์ด ์๋์ผ๋ก ๋์ด์ง๋๊ฑธ ์์์๋ค.
์ปค๋ฅ์
ํ์ ์ฌ์ฉํ๋ฉด ์ปค๋ฅ์
์ ์ฌ์ฌ์ฉํ ์ ์๊ณ ์ปค๋ฅ์
์ ๋ ๋นจ๋ฆฌ ์ป์์ ์๋ค.
๋๋ฐฐ ์ด์์ ์ปค๋ฅ์
๋งบ๋ ์๋ ํฅ์์ ์ป์์ ์๋ค.
๋ค์์ redis๋ฅผ ํด๋ณด์.