Oracle Application Server 성능 모니터링 및 조정(CPU 부하 높음)

Oracle Application Server 성능 모니터링 및 조정(CPU 부하 높음)

Oracle Application Server 성능 모니터링 및 조정(CPU 부하 높음)

나는 방금 회사에 채용되었는데 상사가 나에게 가능한 한 빨리 해결해야 할 성과 문제를 제시했습니다. 서버 측에서 이전에 Java EE에 대한 경험이 없습니다.

시스템에 대해 배웠지만 여전히 해결책을 찾을 수 없었던 내용을 시작하겠습니다.

우리는 오라클 애플리케이션 서버(10.1.1)를 가지고 있습니다.) 및 Oracle 데이터베이스 서버(9.2.), 소프트웨어 담당자들은 이 프로젝트에서만 사용되는 Ajax와 함께 특별히 JSF 1.2를 사용하여 일종의 대규모 J2EE 프로젝트(X 프로젝트)를 작성했습니다. 그들은 코드에 PL/SQL을 적극적으로 사용합니다.

그래서 우리는 응용 프로그램 서버(Solaris 시스템)를 시작했습니다. 모든 것이 괜찮은 것 같습니다. 사용자는 월요일부터 다양한 위치에서 앱을 사용하기 시작합니다(앱 200에는 사용자 계정이 있습니다. 방금 확인해보니 연결 풀이 올바르게 설정되어 있고 세션은 15분 동안만 활성화됩니다).

일정 시간(2일) 후에 CPU 사용률이 %60으로 높아집니다.밤에도 여전히 똑같아아무런 변화가 없습니다(현재 온라인 사용자 수는 거의 1~2명입니다).같은 서버의 다른 응용 프로그램에 할당된 CPU를 사용하기 시작합니다. 서버를 다시 시작하지 않으면 2일 후 활용도가 90%가 되며 애플리케이션이 너무 느려 최종 사용자가 전화를 걸기 시작합니다.

가장 큰 문제는 소프트웨어 엔지니어가 코드가 명확하다고 말하고 시스템 및 DBA ​​관리자가 우리가 올바른 구성을 갖고 있다고 말하는데, 다른 응용 프로그램에서는 이 문제가 X 응용 프로그램에서만 발생하는 이유가 괜찮은 것 같습니다.

DB를 테스트 플랫폼에 복사하고 최신 버전으로 업그레이드하기 시작하며, 버그가 있는지 없는지 애플리케이션 서버(Weblogic)에서도 동일하게 수행했습니다. 저는 단 한 명의 사용자와 weblogic 관리 패널만 직접 테스트했습니다. 스레드를 추적하고 덤프할 수 있습니다. 나는 몇 가지 스레드가 다음과 같이 표시되는 것을 발견했습니다.호깅. 매뉴얼을 확인하고 추적을 제어할 때 .java 파일에서 PL/SQL 코드가 호출되는 행 번호를 알려주는 것을 볼 수 있습니다. 소프트웨어 엔지니어링. 예, 정말 복잡한 PL/SQL 코드가 있지만애플리케이션 서버와 어떤 관계가 있나요?이게 DB 서버의 문제인 것 같은데 맞는 것 같아요...

질문에 구멍이 많다는 것을 알고 있습니다. 더 자세히 설명하고 싶지만 안내해 주셔서 감사합니다.

미리 감사드립니다 ...

편집: 더 복잡한 애플리케이션을 실행하기에 충분한 CPU와 메모리의 서버

답변1

과도한 PL/SQL 호출은 스레드를 차단해야 하므로 CPU 사용량이 감소해야 합니다.

느린 애플리케이션 서버에 대한 첫 번째 요청은 gc 로그를 확인하는 것입니다. 자주 발생하는 주요 컬렉션(메모리 누수 또는 JVM이 단순히 더 많은 메모리를 소모함을 나타냄)을 찾는 것입니다.

내가 돌보는 시스템은많은두꺼운 Oracle 드라이버에서 경량 JDBC 드라이버로 전환한 후 더 안정적이었습니다. 하지만 문제는 주로 컨테이너 충돌로 나타났습니다.

로그는 시스템의 모든 문제에 대한 좋은 지표가 되어야 합니다. 그러나 개발자가 거기에 무엇을 쓰기로 선택하느냐에 따라 많은 것이 달라집니다. 느린 SQL로 인해 연결 풀이 소진될 수 있습니다. 풀이 연결 통계를 기록하고 있는지 확인하세요. 또한 JVM에 대해 ulimit가 올바르게 설정되었는지 확인하십시오.

DB 계층에서 9i를 실행하고 있으므로 AWR 기능이 없습니다. DB에서 문제를 일으키는 원인을 식별하려면 statspack을 실행해야 합니다(그러나 이는 이미 사이트 성능 관리를 위한 표준 관행임).

점진적인 성능 저하는 애플리케이션의 메모리 누수를 나타냅니다. 이는 일반적으로 객체가 역참조되지 않아 가비지 수집에 적합하지 않기 때문에 발생합니다. 즉, 프로그래밍 문제입니다. 이는 대부분의 Java 프로파일링 도구에서 명백하게 나타납니다.

나는 호깅으로 나타나는 일부 스레드가 있음을 발견했습니다.

현실적인 작업 부하로 이것을 테스트하지 않는 한 결과는 거의 쓸모가 없습니다.

관련 정보