2010-06-28 3 views
2

멀티 스레드 서비스의 병목 현상을 찾으려고합니다. 나는 -c 100으로 ab를 사용했고 350 주변의 TPS를 관찰했다. 질문은 CPU 사용률이 최대 70 %이고 메모리가 10 %라는 것이다. 그래서 그것은 마치 CPU 나 메모리가 아닌 것처럼 보입니다. 디스크 또는 네트워크 I/O를 수행하지 않습니다. 병목 현상이 무엇인지 어떻게 알 수 있습니까?다중 스레드 서비스에서 병목 현상을 어떻게 찾을 수 있습니까?

+0

프로세스에 대한 세부 정보를 추가 할 수 있습니까? 디스크 또는 네트워크 I/O가 없다는 사실은 조금 벗어난 것처럼 보입니다. – ChaosPandion

+0

기본적으로 서비스는 6 개의 스레드 (ExecutorSevice 풀 사용)를 시작하여 들어오는 요청마다 캐시에서 6 회의 읽기를 수행합니다. 나는 ehcache를 사용하고 있으며 오직 4 개의 자원에 접근하고있다. 첫 번째 패스를 제외하고 모든 액세스가 캐시 히트임을 확인했습니다. 리소스는 실제로 크기가 5KB 이하인 매우 작습니다. 나는 JProfiler를 사용했고 sun.misc.unsafe.park에서 보낸 시간의 90 %를 보았고 나머지 10 %는 나의 방법이었다. 이/debug를 어떻게 해석해야합니까? – extraeee

답변

1

교착 상태에있는 스레드가 서로 기다리고 있습니까? 데이터베이스 잠금 대기중인 스레드가 있습니까? 대기중인 스레드는 종종 시스템이 느려지거나 대기하는 것처럼 보일 수도 있지만 리소스가 소비되는 것을 항상 보지는 못합니다.

+0

@Chis Aldrich - cseric이 어떻게 그 스레드를 찾을 수 있습니까? – MaasSql

+0

@MaasSql - 비싸다는 것을 알고 있지만 VS2010 프로파일 러에는 데드 록을 찾는 데 도움이되는 몇 가지 멋진 기능이 있습니다. – ChaosPandion

+0

ChaosPandion은 프로파일 러 (또는 잠재적으로 스레딩을 표시 할 수있는 코드 디버거)를 사용해야한다고 말했습니다. 그러나 프로파일 러가 가장 좋은 방법입니다. 어떤 시스템이 사용되고 있는지 또는 어떤 언어인지 알지 못하면 프로파일 러 도구를 추천하는 것이 더 어렵습니다. 우리 회사에서는 Java 및 IBM 스택 제품을 사용하는 경향이 있으므로 IBM 프로파일 러를 사용합니다. 희망이 도움이되었다. –

관련 문제