TimeOut 이슈

안녕하세요 API서버를 개발하고있는 개발자입니다.

Api를 호출해서 특정 작업을 실행한 다음 HttpResponseMessage를통해 결과값을 반환 하고있습니다.
다만 지금 문제가 하나있는게 가져와야할 값이 많아져서 시간이 늘어나면(약 3분이상) 클라이언트 단에서 Status 500 / Timeout의 html 태그가 리턴되고있습니다. Api내 로그는 내부로직이 다 실행 된 후 Return 까지 작업을 하는 부분까지 로그가 정상적으로 쌓여있습니다.

호출하는 클라이언트 단에서는 Timeout을 방지하기위해 10분으로 설정 해둔 상태이고 PostMan에서는 -1 셋팅을통해 무제한으로 설정해두었는데도 이렇게 나오고있습니다.

혹시 Api서버단에서도 뭔가 셋팅할게 있을지 잘 모르겟어서… 도움을 구하고자 글을 남겨봅니다… ㅠㅠ

2개의 좋아요

ASP.NET 버전과 IIS, NGINX 웹 서버 유무에 따라 설정이 많이 달라지는데요.
어떻게 되시나요?

ASP.NET 버전은 총 3가지로 나뉘네요.

  • ASP.NET Core web.config를 사용하는 버전
  • ASP.NET Core web.config를 사용하지 않는 버전
  • ASP.NET Core가 아닌 이전 버전
3개의 좋아요

안녕하세요 현제 .NET Core를 사용하지않는 버전인 .NET Framework 4.8 입니다!
그리고 서버같은경우는 Azure WebApp을 이용하고있습니다. ( Azure 같은경우 WebApp같은경우 PaaS 형태의 서비스라 IIS를 별도로 컨트롤 할 수는 없는것으로 알고있습니다. 버전은 늘 최신버전을 유지한다고 합니다.)

너무 위 설명이 짧앗던것 같아 부연설명을 드리자면
해당 api는 데이터를 타 서버에 전송하는 api 인데 1~50건 까지는 문제없이 동작을 하나 50건 이후로는 이슈가생기는 부분입니다. 또한 Api 구간별로 로그는 다 남겨두며 마지막에 Response를 반환하기전에도 로그를 찍어둡니다. 현재 이슈가되는 현상이 발생하더라도 해당 로그에는 정상적인 실행은 다 되었다고 나오고는 있습니다.

따라서 실제로 Api는 다 동작을 하나 요청자인 클라이언트 측에 전달되는 메시지는
Status 500과 아래와 같은 Request Timed Out이며 오류메시지는 분명 지정된 시간내에 응답을 못햇다고하는 부분이니 우선 클라이언트 단에서 요청시 timeout을 무한대로 바꿔서 테스트해봣으나 그래도 발생을 해서 서버측의 이슈가 아닐까 하는방향으로 찾아보다 질문도 남기게됫습니다 ㅠ

500 - The request timed out.

500 - The request timed out.

The web server failed to respond within the specified time.
2개의 좋아요

ASP.NET .net framework 4.8 webapi 실행 시간 조정 방법 공유 드립니다.
web.config에 아래 값을 설정하시면 됩니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <httpRuntime executionTimeout="110" />
  </system.web>
</configuration>

코드로는 Controller에 아래와 같이 설정하시면 됩니다.

HttpContext.Current.Server.ScriptTimeout = 300;

제가 아는 Azure WebApp이면 Azure App Service를 말씀하시는 것 같은데요.
https://azure.microsoft.com/ko-kr/services/app-service/#overview
web api의 처리와는 무관하게 시간 초과가 발생되는 것 같다는 말씀하셔서 찾아 봤는데 Azure App Service에 포함된 Azure Load Balancer의 timeout이 230초라고 하네요.
앞에서 말씀드린 web.config 설정 변경 후 시간 체크 해 보시면 좋겠습니다.
image

아시는 것처럼 230초도 결코 짧은 시간이 아니기에 가능하다면 많은 건수가 포함된 결과는 페이징 처리를 하시면 어떨까 싶습니다.
WebAPI 요청시 offset, pageSize 를 포함하여 요청하고 1 ~ 50, 51 ~ 100, 101 ~ 150 등 나누어서 받는다면 근본적인 이슈가 해결되지 않을까 조심스럽게 의견 드립니다.

2개의 좋아요

친절히 알아봐 주셔서 감사합니다.
excutionTimeout같은경우에는 미리 수정을 해보았엇는데 이미 안되었엇습니다.

다만 Azure 로드벨런서의 시간이 230초라는부분은 덕분에 알아가게됩니다!! 해당부분을 참고하여 작업을 진행해봐야겠습니다.

아 그리고마지막에 제안주신부분은 현재 Api자체가 APi호출 후 해당서버내부의 데이터를 가져와서 반환해주는게 아니라 다른 Api를호출하여 가져오는 부분이라 현재 이슈가 되는 Api단에서는 페이징처리가 사실 좀 어려운부분이 있습니다. 처음에 50건까지는 잘 되엇으나 그 후 더 많은 데이터를 시도하다 에러가 나는부분이라 애당초 호출하는 측과 페이징처리를함께 하는방향으로 논의를 해보도록 하겠습니다. 진심어린 조언 대단히 감사드립니다.

3개의 좋아요