2009-03-10 5 views
11

JSF가 세션을 채우고있는 문제로 실행됩니다. 우리는 요 전날 시스템 충돌이있었습니다. Heap을 IBM에 보냈고 검토를 위해 50M 정도의 세션이 있음을 확인했습니다. 그들은 세션에서 JSF 구성 요소를 발견했으며 일부는 매우 컸습니다.JSF 튜닝

그래서 조정할 수 있습니까? 살펴볼 구성 항목은 무엇입니까? 또는 다른 방향.

우리 시스템은 프리젠 테이션 레이어를 위해 JSF와 Spring을 사용하여 빌드되고, 백엔드는 WebSphere 6.1에서 모두 실행되는 EJB, Spring 및 Hibernate입니다.

답변

22

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

뷰 상태의 크기를 늘리거나 (구성 요소에 큰 값을 설정) 구성 요소에 대한 참조가 다른 세션 상태로 누출되는 것처럼 들리 겠지만 (좋지는 않습니다) 또 하나의 잠재적 인 원인은 지나치게 큰 시각 일 것입니다. 사람들이 UI 트리를 만들면 데이터 테이블이있는 매우 큰 컨트롤 그래프로 쉽게 이동할 수 있습니다. IBM이 서식있는 텍스트와 스프레드 시트 컨트롤을 제공한다는 것을 알고 있습니다. 이들의 사용이 주 크기에 미치는 영향에 대해서는 언급 할 수 없습니다.

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

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

는이 때문에 구분됩니다

JSF 요청 사이의 두 가지 저장 데이터 테이블의 자식과 같은 일부 컨트롤에는 여러 상태 (각 행마다 하나씩)가있을 수 있습니다. 상태는 양식의 숨겨진 필드 (암호화되지 않은 경우 큰 보안 위험이 될 수 있음) 또는 세션에 저장 될 수 있습니다. 동일한 세션을 공유하는 여러 브라우저 창 (일부 구현에서는 뒤로 버튼 지원)을 수용하기 위해 여러보기가 저장됩니다.

  • 주어진 시간에 특정 사용자에 대해 세션에서 응용 프로그램이 유지할보기 상태 수를 설정하는 구성 옵션이 있어야합니다.
  • 저장된 뷰/상태의 크기를 측정하는 StateManager을 제공하여 뷰 상태의 크기를 측정 할 수 있습니다 (faces-config에서 StateManager를 구성하십시오.StateManager를 사용하는 public 생성자가있는 xml - 자세한 내용은 JSF spec PDF를 참조하십시오. 상태는 직렬화 가능하고 스트림에 덤프하여 크기를 확인할 수 있습니다.

대부분의 IDE 내장 JSF 응용 프로그램에는 backing beans가 있습니다. 세션 빈 범위를 통해 원하는 상태보다 오래 상태를 유지하면서 세션에 부담을 줄 수 있습니다. 페이지 당 하나의 뒷받침 빈이있는 경향이 있으므로 페이지가 많을수록 문제는 커집니다. faces-config.xml을 확인하여 잠재적 인 문제인지 확인하십시오.

기타 HttpSessionAttributeListener을 구성하는 것입니다. stack trace을 통해 앱의 문제 영역을 식별 할 수 있습니다.

3

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

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

그러나 두 가지 경향이 있다면 JSF에 치명적인 결함이있을 수 있습니다. 개인적으로, 나는 완전히 그것을 멀리합니다.

왜 스프링 웹 프런트 엔드를 사용해보고 도움이되는지 확인해보십시오. Spring 이디엄을 따르는 경우 JSF를 JSTL 기반 JSP와 스프링 컨트롤러로 대체하는 것이 상대적으로 간단한 문제 여야한다.

+0

개인적인 의견이지만 IBM과 JSF 구현에 결함이 있다고 생각합니다. 나는 내 감정을 정당화 할 수 없다 :) – guyumu

+0

내가 봤던 것은 Sun JVM과 Apache JSF 구현을 사용하는 데 실패했다. 아파치는 몹시 IBM이기 때문에 두 가지가 어떻게 다른지 말할 수는 없다. JSF 모델이라고 생각합니다. 매우 무겁습니다. – duffymo

3

JSF 프로젝트에서 작업하면서 여러 개의 JSF h : form 요소를 추가하는 버그가 있음을 발견했습니다. 결과적으로 모든 양식에 포함 된 전체 viewstate의 복사본이 생성됩니다. 페이지 당 1 개의 폼으로 줄이면 ~ 2M에서 ~ 300K까지 페이지를 줄일 수 있습니다.

1

세션 범위로 많은 백킹 빈과 관련된 문제가 발생할 수 있습니다.

MyFaces Orchestra을 살펴볼 수 있습니다. 이것은 대화 범위를 제공하는 라이브러리이므로 사용자가 특정 bean 세트를 마친 후에는 세션에서 제거됩니다.

스프링 웹 플로우는 비슷한 기능을 가지고 있지만 실제로 조사하지는 못했습니다.

1

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

매트.

1

MyFaces < 1.1.6을 사용하는 경우 세션에서 오래된 일련 화 된 뷰를 캐시하는 방식으로 막대한 메모리 누수가 발생하므로 효과적으로 릴리스되지 않도록하여 가비지 수집 될 수 있습니다. 나는 그것에 심각한 문제가 있었고 50Mb 세션도있었습니다. MyFaces를 신속하게 업그레이드하여 문제없이 문제를 해결했습니다.

1

데이터베이스에 세션 지속성을 구성하고 메모리 사용량이 가장 적은 세션을 푸시하기 위해 최소 사용 알고리즘을 사용합니다. 높은 성능 (적절하게 구성되었을 때)을 가지며 구체적이고 신속하게 도움을줍니다.

1

오래된 주제의 비트이지만 최근에이 문제가 발생했습니다. 보기 및보기 상태는 이전에 언급 한대로 저장되는 경우가 많으며 세션을 채워 뒤로 단추가 작동하도록 허용합니다. 설정해야 할 배포 설명자 (web.xml)에서이를 정렬하는 매개 변수가 있습니다.

MyFaces 및 JSF RI를 사용할 때와 같이 특정 라이브러리의 여러 인스턴스에 둘 이상의 매개 변수 설정이 필요할 수 있습니다. 기본적으로 꽤 높은 값으로 설정 될 수 있습니다 (각각 20, 16). 이것은 세션의 20 배 공간을 사용할 수 있음을 의미합니다. 프로덕션 환경에 대한

1

JSF 튜닝 팁 :
- 이미지, CSS, 자바 스크립트 자원의 사용이 (img,link,script)하지 서버 측 표준 HTML 태그에 의해 수행하고, 상대 경로를 피하기 위해 URL 앞에 #{request.contextPath}을 설정해야한다 문제.
- 사용하여 페이지 (menu,header,footer)omnifaces cache
의 캐시 정적 섹션 -
을 -1로 refresh-period 변수를 설정 - 생산
project-stage 설정 - 코드 필터를 검토 또한 어떤

이, 내 기사 "Java Server Faces in Real-Life Applications"를 선택하면 DZone을 사용하면 개발, 테스트 및 프로덕션 환경에서 JSF에 대한 전체 그림을 얻을 수 있습니다.

+0

감사합니다! , 업데이트 됨. –