쉽게 재현 할 수없고 프로덕션 환경에서만 발생하는 예외를 어떻게 디버깅 할 수 있습니까?


9

프로덕션 환경에서만 예외가 발생하는 문제를 해결하고 있습니다. 이러한 환경에 액세스 할 수 없으며이 예외의 의미를 알 수 없습니다. 오류 설명을 보면 원인을 이해할 수 없습니다.

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

누군가 이런 종류의 문제에 접근하는 방법에 대해 조언 해 주시겠습니까?


4
이것을 StackOverflow로 옮겨야합니까? 더 많은 답변을 얻을 수있을 것 같습니다.
DXM

10
한마디 : 로깅.
quant_dev

1
@DXM-너무 일반적이기 때문에 스택 오버플로에 대한 주제가 아닙니다. OP는 특정 솔루션이 아닌 전략과 기술을 따릅니다. 실패한 코드가 포함 된 경우 스택 오버플로에서 작동했을 수 있습니다.
ChrisF

내 경험상 이와 같은 대부분의 문제는 보안 구성 문제에서 발생하며 파악하기 어려울 수 있습니다. 다른 사람들이 언급했듯이, 좋은 로깅은 그것을 드러내는 데 도움이 될 것입니다.
jfrankcarr

답변:


18

일반적으로 디버그 로깅이 향상됩니다. 알고 싶은 것을 파악하고 코드에 추가 한 다음 로그에 추가하여 문제를 해결하십시오. 당시의 환경에 대한 자세한 내용을 캡처하면 요청, 시간 등

특히, 클라이언트 에서이 패턴에 도달하고 최적화 된 것을 발견하면 TCP 레이어 트래픽을 캡처하는 일반적인 패턴을 찾습니다.

교환 된 SSL 메시지를 보면 프로토콜에서 무엇이 잘못되었는지 또는 최소한 요청의 공통 특성이 무엇인지 알 수 있습니다. 일단 당신이 그것을 디버깅에 더 가까이 있어야합니다.

가이드로서, 이것은 세 가지 중 하나에서 비롯된 것 같습니다.

  1. SSL이 아닌 것이 SSL 포트와 통신했습니다. (포트 스캔은 일반적이지만 HTTP는 HTTPS 포트로도 발생합니다.)
  2. 클라이언트는 서버와 허용 가능한 암호 집합을 공유하지 않습니다.
  3. 클라이언트는 인증서를 제공하고 서버는 hissy-fit을 갖습니다. (흔하지는 않지만 가능합니다.)

1
서버가 자체 서명 인증서를 제공하거나 클라이언트가 알지 못하거나 신뢰하지 않는 CA에 의해 서명되었을 수 있습니다.
Carlos Campderrós

당사자 중 하나가 인증서가 만료되면 # 3이 발생한다고 생각합니다.
FrustratedWithFormsDesigner

프로덕션 시스템에서 꽤 많은 디버깅을 수행했습니다. 실제로 디버거를 사용한 적이 없으며 항상 화면의 특정 부분에 키 값을 기록하거나 기록하고 있습니다.
Loren Pechtel

귀하의 조언에 감사드립니다. 제작 버그를 해결하는 실용적인 방법이 있다고 확신합니다.
C4CodeE4Exe 2019

4

구성 가능한 최대 로그 수준으로 로깅 전략을 사용하는 것이 좋습니다. log4j ( http://logging.apache.org/log4j/ , http://en.wikipedia.org/wiki/Log4j ) 와 같은 유틸리티 가 작업을 수행 할 수 있습니다.

구성 가능한 로그 수준 (또는 자세한 정보)은 소프트웨어를 다시 배포하지 않고도 오류의 원인을 찾을 수 있도록 중요합니다.

이러한 전략으로 오류를 찾기에 충분하지 않으면 통신중인 응용 프로그램에서 생성 된 로그를 생성 / 읽는 방법을 찾으십시오.

전자 우편을 통해 오류에 대한 추가 정보를 자동으로 가져 오는 메커니즘을 구현할 수도 있습니다.

보다 일반적으로 로깅 및 추적을 포함하는 더 큰 주제 인 계측에 대한 기사를 읽을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.