문제

JSF가 세션을 채우는 문제가 발생합니다.얼마 전 시스템 충돌이 발생했습니다.검토를 위해 힙을 IBM에 보냈고 일부 세션이 50M에 달하는 것으로 나타났습니다.그들은 세션에서 JSF 구성 요소를 발견했으며 일부는 매우 컸습니다.

그렇다면 할 수 있는 튜닝이 있을까요?살펴볼 구성 항목은 무엇입니까?아니면 다른 방향.

우리 시스템은 프리젠테이션 계층으로 JSF 및 Spring을 사용하여 구축되었으며 백엔드는 EJB, Spring 및 Hibernate 모두 WebSphere 6.1에서 실행됩니다.

도움이 되었습니까?

해결책

JSF는 유용한 기술이지만 확실히 자신을 매달릴 수 있습니다.

뷰 상태의 크기를 팽창 시키거나 (구성 요소에 큰 값을 설정함으로써) 구성 요소에 대한 참조를 다른 세션 상태 (나쁜)로 누출하는 것 같습니다. 또 다른 잠재적 인 범인은 지나치게 큰 견해 일 것입니다 (사람들이 UI 나무를 만들 수있는 것이 쉽다는 것이 데이터 테이블이 어디에나있는 매우 큰 제어 그래프로 이어질 수 있음을 보았습니다). IBM은 풍부한 텍스트와 스프레드 시트 컨트롤을 제공한다는 것을 알고 있습니다. 이들의 사용이 상태 크기에 어떤 영향을 미치는지에 대해서는 언급 할 수 없습니다.

낮은 매달린 과일은 세션 범위를 위해 구성된 관리되는 콩을 확인하는 것입니다. faces-config.xml.

JSF는 요청간에 두 가지를 저장합니다.

  • 보기 (페이지의 모든 컨트롤)
  • 보기 상태 (컨트롤 상태)

데이터 테이블의 어린이와 같은 일부 컨트롤은 여러 상태 (각 행 당 하나)를 가질 수 있기 때문에 분리됩니다. 상태는 양식 (암호화되지 않은 경우 큰 보안 위험이 될 수 있음) 또는 세션에서 숨겨진 필드에 저장 될 수 있습니다. 동일한 세션을 공유하는 여러 브라우저 Windows (및 일부 구현에서는 뒤로 버튼 지원)를 수용하기 위해 여러 뷰가 저장됩니다.

  • 앱이 주어진 시간에 주어진 사용자의 세션에 보관할 뷰 수를 설정하는 구성 옵션이 있어야합니다.
  • 당신은 STATEMANAGER 이는 저장된보기/상태의 크기를 측정합니다 (STATEMEMENAGER를 취하는 공개 생성자로 faces-config.xml의 스테이 메너를 구성하십시오. JSF 사양 자세한 내용은 PDF; 상태는 직렬화 가능하며 스트림에 덤프하여 크기를 확인할 수 있습니다).

대부분의 IDE가 구축 된 JSF 앱에는 후원 콩이 있습니다. 세션 Bean 범위를 통해 세션에 긴장을 풀고 세션에 긴장을 풀 수 있습니다. 페이지 당 백업 콩이 하나있는 경향이 있으므로 페이지가 많을수록 문제가 더 커집니다. 당신을 확인하십시오 faces-config.xml 이것이 잠재적 인 문제의 원인인지 확인하기 위해.

당신이 할 수있는 일은 httpsessionattritipelistener 당신의 web.xml. 당신은 얻을 수 있습니다 스택 추적 앱에서 문제 영역을 식별하는 데 도움이됩니다.

다른 팁

이것은 JSF와 과도한 객체 생성으로 인해 종료된 두 번째 시스템입니다.다른 하나도 백엔드에서 Spring과 Hibernate를 사용했습니다.OptimizeIt을 사용한 프로파일링에서는 모든 요청에 ​​대해 백엔드 응답이 밀리초 단위로 나타났지만 30초에서 최대 몇 분까지 너무 오래 걸리기 때문에 스톱워치를 사용하여 브라우저 렌더링 시간을 다시 측정할 수 있었습니다.클라이언트가 소비하는 메모리는 터무니없었습니다.

나는 그 프로젝트 팀의 일원이 아니라 관찰자일 뿐이었습니다.문제가 해결되었는지, 그렇다면 해결 방법이 무엇인지 물어봐야 합니다.

그러나 두 가지 점이 추세를 만든다면 JSF에 치명적인 결함이 있을 수 있다고 말하고 싶습니다.개인적으로 나는 그것을 완전히 멀리합니다.

Spring 웹 프론트엔드를 사용해 보고 그것이 도움이 되는지 확인해 보는 것은 어떨까요?Spring 관용구를 따른다면 JSF를 JSTL 기반 JSP 및 Spring 컨트롤러로 바꾸는 것은 비교적 간단한 문제일 것입니다.

나는 JSF 프로젝트를 진행하고 있었고 여러 JSF H : Form Elements를 추가하는 버그가 있음을 발견했습니다. 전체 Viewstate의 사본이 모든 양식에 포함됩니다. 페이지 당 1 개의 형태로 절단하면 페이지가 ~ 2m에서 ~ 300k까지 면도되었습니다.

세션 범위로 많은 뒷면 콩을 가진 문제가 발생할 수 있습니다.

당신은 조사를 시도 할 수 있습니다 MyFaces Orchestra. 이것은 대화 범위를 제공하는 라이브러리이므로 사용자가 특정 콩 세트를 완료하면 세션에서 제거됩니다.

스프링 웹 플로우가 비슷한 기능을 가지고 있음을 이해하지만 실제로는 조사하지 않았습니다!

JSF는 세션에서 뷰를 저장하여 리치 구성 요소 기반 아키텍처 (뷰 상태를 유지해야 함)를 지원하고 제대로 사용하지 않으면 힙을 채울 수 있습니다. 큰 작업 흐름이없는 경우 항상 세션 당 작은 조회수를 사용하지 마십시오. 또한 백링 비를 세션에 최대한 많이 유지하지 마십시오. 사용자 정의 태그를 사용하여 다음 요청주기를 위해 데이터 객체를 만듭니다. 또한 JSF와 함께 Spring Web Flow를 사용할 수 있습니다. JSF는 세션에서 구성된 뷰를 줄이기 위해 응용 프로그램에 긴 워크 플로가있는 경우 뷰 범위 및 흐름 범위를 소개합니다. JSF는 풍부한 사용자 인터페이스를 쉽게 만드는 데 사용될 수 있으므로 데스크탑 응용 프로그램과 유사한 웹 응용 프로그램을 구축하는 데 도움이됩니다. JSF 프레임 워크에 특정 힙을 할당하여 작업을 수행하십시오. 그러나 애플리케이션 측면에서 메모리를 효율적으로 사용하고 메모리 누출이 없는지 확인하십시오. 개발 자체에서 모든 메모리 누출을 조사하고 수정해야합니다. Aways는 프로파일 러를 사용하여 응용 프로그램에 존재하는 메모리 누출 및 성능 병목 현상을 찾습니다.

매트.

MyFaces <1.1.6을 사용하는 경우 세션에서 오래된 직렬화 된 뷰를 캐시하는 방식에 큰 메모리 누출이 있습니다. 나는 그것에 심각한 문제가 있었고 50MB 세션도있었습니다. MyFaces의 빠른 업그레이드는 아무런 문제없이 문제를 해결했습니다.

세션을 데이터베이스에 영구적으로 구성하면 최소한 사용 알고리즘을 사용하여 사용되지 않은 세션을 메모리에서 푸시합니다. 고성능 (올바르게 구성된 경우)을 가지고 있으며 구체적이고 빠르게 도움이됩니다.

약간의 오래된 주제이지만 최근에 이것을 발견했습니다. 종종 View and View State는 (앞에서 언급 한대로) 저장되며 세션을 채우도록 백 버튼이 작동하도록합니다. 배포 디스크립터 (web.xml)에 설정 해야하는 매개 변수가 있습니다.

특정 라이브러리의 여러 인스턴스는 MyFaces 및 JSF RI를 사용할 때와 같은 두 가지 이상의 매개 변수 설정이 필요할 수 있습니다. 기본적으로, 그들은 꽤 높은 값으로 설정할 수 있습니다 (각각 20과 16은 믿습니다). 즉, 세션의 일부를 위해 필요한 공간의 20 배를 사용할 수 있습니다.

생산 환경을위한 JSF 튜닝 팁 :
- 이미지, CSS 및 JavaScript 리소스 사용은 표준 HTML 태그로 수행해야합니다. (img,link,script) 서버면이 아니며 설정하십시오 #{request.contextPath} 상대 경로를 피하기 위해 URL 전에 문제가 발생합니다.
- 페이지의 정적 섹션을 캐시합니다 (menu,header,footer) 사용 omnifaces cache
- 세트 refresh-period 변수 -1
- 세트 project-stage 생산에
- 코드 필터를 검토하십시오

또한 내 기사를 확인하십시오 "Java 서버는 실제 응용 프로그램에 직면 해 있습니다"Dzone에서는 개발, 테스트 및 생산 환경에서 JSF에 대한 전체 그림을 제공합니다.

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