2010-11-18 5 views
4

내 문제는 다음과 같습니다. Apache Cassandra를 디버그하고 응용 프로그램의 흐름을 이해하려고합니다. 나는. 클라이언트가 요청을 보내면 put(), 호출되는 메소드 및 시스템이 내부적으로 작동하는 방식을 말합니다.큰 서버 쪽 분산 Java 응용 프로그램을 디버깅하는 방법

  1. 이 항목을 넣어() 메서드의 포인트를 호출하는 카산드라 코드의 주요 방법을 쓰기
  2. 돈을 '일식 등 등에 중단 점을 넣어 또는
  3. : 그래서, 여기에

    내가 생각하고 무엇을 log4j 로거 (이미 cassandra에서 구현 됨)를 사용하여 기본 메소드를 작성하고 TCP를 통해 서버에 액세스하는 일반 클라이언트를 사용하고 로그 파일을 읽고 코드를 이해함으로써 "디버그"를 사용하십시오.

내 질문은, 그런 분산 응용 프로그램을 디버깅하는 가장 이상적인 방법은 무엇입니까?

답변

3

이상적인 방법? 둘 다.

"디버그"및 "응용 프로그램의 흐름을 이해하십시오."- 흐름을 이해하기 전에 디버깅하기가 매우 어렵지만 이해는 그 자체로 끝날 수 있습니다.

실제 시스템에서는 대용량 분산 시스템을 자주 다룰 때 디버거에 의존 할 수 없습니다. 최소한 시스템이 사용 중이거나 실행 시간이 지나면 일부 문제 만 나타나기 때문입니다. 따라서 응용 프로그램 코드 및 인프라 코드에서 디버그 추적 및 해당 추적에 대한 세밀한 제어가 필요합니다.

그러나 아주 밝게 나타날 수있는 디버거에서 실행할 기회가 있다면.

내가 전에 생각해야 할 사항은 다음과 같습니다.

a). 있을 수있는 디자인 문서를 연구하십시오.

b). 좋은 IDE, 예를 들어 소스 코드를 탐색하십시오. 식. 그냥 컨트롤을 따르십시오. Hmmm 여기 흥미있는 작은 조각이있다, 그것이 어디에서 전화를 얻는 지 궁금하게 생각한다? 클래스에서 해당 메서드를 호출하면 그 작업은 무엇입니까? 그 생성자는 언제 호출 되나요?

그 중 몇 가지를 추적하면 추적이 훨씬 쉬워지며 중단 점을 넣을 위치를 더 잘 알 수 있습니다.

+0

개발자 환경에 대해 이야기하고 있습니까? 앱이 프로덕션 환경에서 실행되는지 여부는 관계가 없습니다. 필자의 목표는 카산드라의 기존 프로토콜을 다시 작성하는 것입니다. – zengr

+0

사실, 흐름의 인상을 갖고 예상되는 로그 메시지가 생성되는지 확인하는 것이 가장 좋습니다. 디버거로 시작하면 세부 사항에서 벗어날 수 있으며 더 큰 그림 (예 : 흐름)에 대한 단서는 없습니다. 그러나 특정 부분에 디버거를 연결하면 기대치를 충족시키지 못할 수도 있습니다. – extraneon

+0

+ Eclipse에서 원격 디버깅을 발견했습니다. 그것도 도움이 될까요? – zengr

0

log4j의 MDC을 사용하고 put() 전에 바로 설정 한 다음 put()을 종료 한 후 삭제하는 방법은 어떻습니까? 그런 다음 put() 내부에서 실행되는 메소드에서 설정 한 다른 로깅을 제공하면 실제로 어떤 일이 발생했는지 확인할 수 있습니다. 해당 방법에서 깊이가 인 경우 스택 추적을 지금 기록한 다음 현재 위치를 볼 수 있습니다.

면책 조항 : 내 디버깅 우선 순위 목록은 다음과 같이 진행됩니다

  1. 스택 추적
  2. 디버거를 사용하여 로그 파일을 검사 검사

그래서, 1과 2의 경우 돈 나에게 대답을주지 않으면, 나는 디버거에 의지 할 것이다.

이렇게 분산 된 응용 프로그램에서 디버거를 사용하는 것은 최후의 수단처럼 들릴 수 있습니다.

0

분산 응용 프로그램에서 로깅을 사용하는 것은 사실 더 넓은 범위에서 실제로 발생하는 것과 상황이 상호 작용하는 방식을 파악하는 가장 좋은 방법 중 하나입니다. 그러나 결국에는 로그 파일에 문제가 발생할 것입니다. 분산 시스템은 다양한 형식과 위치에서 많은 정보를 생성 할 수 있습니다. 따라서 이와 같이 log4j (또는 비슷하게)를 사용하려면 로그를 한 곳으로 모아서 조사해야합니다. This tool은 도움이 될 수 있습니다. - 지속적인 집계뿐만 아니라 다양한 소스의 집계 된 로그 스트림을 실시간으로 모니터링 할 수 있습니다. 예를 들어, 특정 호스트 (또는 호스트 범위)의 데이터 계층에 중점을두고 실시간 상황을 관찰 할 수 있습니다. 또는 특정 컴퓨터의 특정 스레드에서 로그를 가져 오거나 이전 포스터에서 이미 언급 한 MDC 컨텍스트를 사용할 수 있습니다. 또한 배포 된 응용 프로그램의 디버거는 대부분 쓸모가 없으므로 생산 시스템에서 전혀 쓸모가 없다는 견해에 동의하고 있습니다. 반면 Log4j는 매우 유연하고 광범위하게 사용되며 로깅을위한 최고의 도구 (IMHO) 중 하나입니다.

0

로그를 사용하고 필요한 경우 로그 수준을 높이십시오. 추가 로그 문을 추가하십시오. 분산 시스템의 다른 구성 요소에서 데이터베이스, 응용 프로그램 서버와 같은 다양한 구성 요소 프로파일 링, 스택 추적 분석, 프런트 엔드 브라우저의 디버깅 도구 사용 웹 응용 프로그램 및 백 엔드 중단 점의 경우 기본 제공

관련 문제