문제

클라이언트 요청을 다른 방식으로 처리하는 서버 응용 프로그램이 있습니다.

최소한의 대기 시간으로 얼마나 많은 사용자에게 서비스를 제공할 수 있는지 알고 싶어서 사용자 요청을 시뮬레이션하는 작은 스트레스 테스트 애플리케이션을 만들었습니다.동시에 다른 응용 프로그램은 메모리/CPU 사용률을 모니터링합니다.

스트레스 테스트 도구는 모든 스레드가 사용자를 나타내는 스레드를 매초 생성합니다.리소스 부족으로 인해 스트레스 테스트에서 새 스레드를 생성할 수 없는 경우 스트레스 테스트 도구의 새 인스턴스가 시작됩니다.

문제는 모든 스레드가 각 요청에 대한 대기 시간과 현재 실행 중인 스레드 수를 파일에 기록하므로 몇 분 후에 디스크에 기록해야 하는 스레드가 많아지면 I/O 문제가 발생한다는 것입니다. 또한 이 동작도 마찬가지입니다. 클라이언트는 데이터만 요청하므로 실제 시나리오에서는 존재하지 않습니다.

사용자당 최대 지연 시간을 측정하고 싶은데 이 문제를 어떻게 극복할 수 있나요?

추신:

일부 답변에서는 네트워크 대기 시간을 고려하기 위해 다른 컴퓨터에서 실행해야 한다고 말합니다. 이것이 내 마지막 스트레스 테스트입니다. 현재 동일한 서버에서 이 테스트를 수행하여 최소 대기 시간으로 지원되는 사용자 수를 확인하고 있습니다.

도움이 되었습니까?

해결책

이것이 네트워크로 연결된 애플리케이션인지 아닌지는 확실하지 않습니다.네트워크로 연결되어 있으면 주말 동안 모든 사람의 데스크톱을 훔쳐 스트레스 테스트를 실행함으로써 간단히 스트레스 테스트를 확장할 수 있습니다.이것이 몇 가지 임시 테스트인 경우 테스트를 확장하는 가장 쉬운 방법일 수 있습니다.

그러나 몇 가지 간단한 개선이 있을 수 있을 것 같습니다.이것이 장기간 실행되는 스트레스 테스트를 의미하는 경우 모든 요청에 ​​대해 새 스레드를 생성하는 대신 작업할 스레드 풀을 생성할 수 있습니다(또는 더 쉽게 자동으로 확장되는 스레드 풀을 사용할 수 있습니다).따라서 테스트를 2000명의 사용자로 정의하고 서버를 망치는 2000개의 스레드를 가동합니다.각 스레드는 본질적으로 테스트를 수행하고 반복하는 루프에 있습니다.

명확하지 않은 또 다른 항목은 모든 스레드가 단일 파일을 공유하려고 하는지 여부입니다.병목 현상을 줄이는 한 가지 방법은 프로그램이 종료될 때까지 정보를 메모리에 유지하는 것입니다.또는 파일 쓰기를 담당하는 작성기 스레드를 가동하면 다른 모든 스레드가 정보를 제공합니다.IO가 백업되면 작성자 스레드는 IO를 사용할 수 있을 때까지 메모리에 유지되며 그 동안 작업자 스레드는 계속해서 서버를 망치게 될 수 있습니다.관련된 스레드 동기화로 인해 확장이 잘 되지 않을 수 있으므로 작업자 스레드의 일부 항목을 버퍼링하고 100개 요청마다 한 번씩만 파일 기록기 스레드와 동기화하는 것이 좋습니다.응답 시간 이상의 것을 추적하는 것처럼 들리지 않기 때문에 이것이 큰 문제가 될 것이라고 생각하지 않습니다.

편집하다:댓글을 바탕 으로이 경우 IO 운영하는 관리자에게 단일 스레드를 사용하는 것이 좋습니다.여러분 모두 작업자 스레드는 파일에 쓰는 대신 세부 사항이 무엇이든 객체를 생성하고 파일에 기록할 큐에 전달합니다.잠금/잠금 해제를 줄이려면 작업자 스레드 내에서도 대기열을 사용하고 자주 동기화하세요.스레드에서 정보를 교환할 때 잠금을 설정했는지 확인하세요.또한 메모리 사용량을 지켜볼 수도 있습니다. 이렇게 하면 보류 중인 모든 항목이 메모리에 쌓일 수 있기 때문입니다.이로 인해 여전히 차단이 발생한다면 쓰기 작업을 줄이거나 더 빠른 하드 디스크를 조정하거나 추가하는 방법을 고려해 보겠습니다.

다른 팁

사용자 당 최대 대기 시간에 관심이 있다면 스레드에서 이것을 수집하지 말고 테스트를 중지 할 때 모든 스레드에 최대 대기 시간을 쓰십시오. 최소/최대/분산 및 실행중인 스레드/사용자 수를 계산하여 통계를 수행 할 수 있습니다. 화면 출력도 업데이트해서는 안됩니다. 데이터 손실을 두려워하면 데이터를 디스크에 자주 기록하십시오.

클라이언트/서버 앱에 대한이 테스트를 수행하는 스레드는 차선책입니다. 코어 수의 제한된 수는 제한된 수의 스레드가 실제로 병렬로 실행되지만 시간이 소요됩니다. 훨씬 나아졌으며 여러 클라이언트에서 프로그램을 시작하기 위해 네트워크 대기 시간에 대한 수치를 제공합니다. 서버 소프트웨어는 클라이언트가 LAN 또는 WAN에서 실행하는 최종 설정에서 하드웨어를 사용할 수 있습니다.

사용자 시뮬레이션으로 많은 클라이언트 머신을 가질 수 없으므로 혼합 된 환경을 가질 것입니다. 그러나 독립 하드웨어의 동시 호출과 같은 시나리오는 호출이 타임스킹을 통해 정간화되지 않기 때문에 스트레스 테스트에 표시됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top