티스토리 뷰

반응형

전자 결재 업무를 맡은지 6개월도 되지 않았을 때 데이터 처리 엔진이 너무 느려서 컴플레인을 받은 적이 있다. 

 

사용량이 급격하게 늘은 탓도 있는 것같다... 계속 인지하지 못했는데 컴플레인이 들어와서 아이쿠 싶었다.

엔진이 워낙 레거시 시스템이고(주석을 보면 2006년 개발흔적도 있다....) 중요한건 관련 히스토리를 아는 분들이 퇴사하셔서 회사에 안계신다. 워낙 web에만 관심이 쏠려있는 시스템이라 엔진은 심지어 코드 형상관리도 되어있지 않았다ㅜㅜ

 

급하게 전임자의 PC 백업 파일을 뒤적거리다가 가장 최신인것같은 엔진 코드를 찾아서 연락해보니 운영계에 배포되어있는 엔진과 버전이 일치한지는 모르겠다고한다.....ㅜㅜ

 

그래도 이거라도 급하게 회사 git에 올려서 지금이라도 버전관리를 시작했다. 

 

데이터 처리가 너무 느린 거를 처리하기 위해 코드 분석을 열심히 했다.. 거의 한달동안 운영하면서 틈틈히 했다.

블로그에 공개할 수는 없지만 아무 개발 문서도 없는 엔진을 ERD, 시퀀스다이어그램, DB스키마를 그려가며 분석했다.

 

분석하다가 멀티쓰레드가 코드에 구현되어있다는 사실을 알게되었다.

 

승리의 브이✌

config XML 파일에 최대 스레드 수를 기재하면 .NET System.Threading.Thread을 사용해서 멀티 스레드 처리를 한다. 

 

1
2
3
4
5
6
7
8
9
10
//-------------------------------------------------------------------
// Thread Manager 객체를 생성하고, Thread의 총 갯수를 설정한 후, 
// Thread Manager의 동작을 시작한다
//-------------------------------------------------------------------
othMgr = new ThreadMgr(Convert.ToInt32(ServerConfig.g_strThreadCnt));
othMgr.Start();
 
oAppMgr = new ApprovalMgr(ref othMgr);
Thread oAppTrd = new Thread(new ThreadStart(oAppMgr.Start));
oAppTrd.Start();
cs

 

스레드를 최대한 늘릴려고 .NET에서 제공하는 MAX Thread 수를 찾아보았다. 

 

 

The default upper limit of threads that the Thread pool will create by calling ThreadPool.SetMaxThreads;

  • 1023 in .NET Framework 4.0 -32-bit environment
  • 32768 in .NET Framework 4.0 - 64-bit environment
  • 250 per core in .NET Framework 3.5
  • 25 per core in .NET Framework 2.0
출처: www.c-sharpcorner.com/blogs/default-thread-pool-size-in-various-net-framework-versions1#:~:text=The%20default%20upper%20limit%20of,1023%20in%20

그리고 테스트를 해보았다. 

싱글 스레드일때 2000건 처리시간이 약 3분 30초이였는데, 1023개 로 올리니깐 약 40초로 줄어들었다.ㅎㅎㅎㅎㅎㅎ

1023까지 올릴필요도 없이..50개로 올리니깐 비슷했다.(애초에 데이터양이 그렇게 많지는 않으니깐..)

 

그리고 매니저님 컨펌을 받고 운영계에 바로 적용했다. 더이상 컴플레인은 오지 않았다!ㅎㅎㅎㅎㅎㅎ

 

 

Next 글: 컴플레인 또 받은 썰....(feat. 통계업데이트)

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함