문제점 해결 팁
Liberty 프로파일의 문제점 해결을 위한 팁입니다.
제품에는 문제를 식별하고 해결하는 데 도움을 주기 위해 통합된 로깅 컴포넌트가 있습니다. 로깅 및 추적을 확인하십시오. 또한 ${wlp.install.dir}/bin 디렉토리에서 IBM® Support Assistant 데이터 콜렉터(ISADC) 명령 도구를 사용하여 요약 파일(예: 로그 파일, 구성 파일)을 신속하게 수집하거나 추적을 실행할 수 있습니다.
예외 메시지를 수신하는 경우, 메시지에 관한 정보는 메시지에서 사용 가능합니다.
각 Liberty 프로파일 API에 대한 Java™ API 문서는 Information Center의 프로그래밍 인터페이스(API) 절에 자세히 설명되어 있고 ${wlp.install.dir}/dev 디렉토리의 javadoc 서브디렉토리 중 하나에 별도의 .zip 파일로도 사용 가능합니다.

Liberty 프로파일을 사용할 때 적용되는 주로 알려진
제한사항에 대한 세부사항은 런타임 환경 알려진 문제 및 제한사항의
내용을 참조하십시오.
JDK가 지원되는 레벨에 있는지 확인
쉽게 원인을 알 수 없는 문제를 경험하고 있는 경우에는 사용하고 있는 JDK가 Java 버전 6 이상을 준수하고 있으며 현재 서비스 레벨에 있는지 확인하십시오. 지원되는 최소 Java 레벨을 확인하십시오.
- 다음 VM 옵션을 사용하도록 설정하십시오. -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass
- 다음 Equinox 구성 옵션을 설정하여 클래스 로드를 위해 클래스 이름 잠금을 사용하도록 Equinox 프레임워크 옵션을 설정하십시오. -Dosgi.classloader.lock=classname
보안 문제점 해결
이 절은 선택할 수 있는 일부 공통 보안 문제 및 솔루션을 설명합니다.
- SESN0008E: 익명으로 인증된 사용자가 user:LdapRegistry/cn=steven,o=myCompany,c=US가 소유하는 세션에 액세스하려고 했습니다.
- 인증된 사용자가 생성한 세션에 인증되지 않은 사용자가 액세스하려고 하는 경우, 이 오류가 발생합니다. 기본적으로 사용 가능한 세션 보안은 세션의 권한 없는 액세스를 금지합니다. 세션을 작성한 사용자만이 액세스할 수 있습니다. 자세한 정보는 세션 보안을 참조하십시오.
JSP(예: login.jsp)를 양식-로그인으로 사용하고 브라우저에서 전송한 SSO 토큰이 만기된 경우 이 오류가 발생할 수 있습니다. SSO 토큰이 만기되기 때문에, 사용자가 양식-로그인으로 구성된 login.jsp 페이지를 사용하여 다시 로그인하도록 프롬프트를 표시합니다. 기본적으로 jsp 페이지가 세션을 가져오려고 합니다. 이 세션은 토큰이 만기된 사용자가 원래 작성했습니다. 하지만 토큰이 만기되고 사용자가 인증되지 않으며, 이 오류를 발생시킨 세션에 액세스할 때 신임 정보가 설정되지 않습니다.
이 오류를 방지하려면, 새 세션을 시작하는 브라우저를 다시 시작하거나, 기본적으로 세션을 작성하지 않도록 login.jsp 파일을 구성하십시오. login.jsp 파일을 업데이트하도록 선택한 경우, <%@ page session="false" %>를 설정하십시오.
- CWWKS9104A: {2}에서 {1}을(를) 호출하는 동안 사용자 {0}에 대한 권한 부여에 실패했습니다. 사용자에게 어떠한 필수 역할에 대한 액세스 권한도 부여되지 않았습니다. {3}.
- 애플리케이션에서 요구하는 역할에 대한 권한이 사용자에게 없는 경우 이 오류가 발생합니다. 사용자나 사용자가 속한 그룹이 오류 메시지에서 언급된 역할 중 하나 이상에 맵핑되는지 확인하십시오. ibm-application-bnd.xmi/xml 파일에 정의된 사용자 대 역할 맵핑이 server.xml 파일에 정의된 맵핑보다 우선합니다. 올바른 맵핑이 정의되었는지 확인하기 위해 두 자원을 검사하십시오. Liberty 프로파일에서 애플리케이션에 대한 권한 구성을 확인하십시오.
- CWWKZ0013E: {0}(이)라는 두 개의 애플리케이션이 시작되지 않고 예기치 않은 보안 동작과 CWWKS9104A 같은 오류 메시지가 표시될 수 있습니다.
- dropins 폴더와 application 요소를 사용한 server.xml 모두에서 애플리케이션을 지정할 때 이 오류가 발생합니다.
결과적으로 애플리케이션 설치가 두 번 시도되고
server.xml 파일의 보안 구성이
적용되거나 적용되지 않을 수 있습니다. 이 문제를 해결하려면
dropins 폴더에서 애플리케이션을 제거하고
다른 디렉토리에 복사해야 합니다. dropins 폴더에 애플리케이션을 남겨 두어야 할 경우에는
server.xml 파일의 다음 코드를 사용하여
애플리케이션 모니터링을 사용하지 않도록 설정해야 합니다.
<applicationMonitor dropinsEnabled="false"/>
- 인증되지 않은 사용자가 내 서블릿 또는 JSP에 액세스할 수 있었습니다.
- 인증이 실패하거나 서블릿이나 JSP가 보호되지 않은 경우 UNAUTHENTICATED의 프린시펄을 포함한 사용자(또는
z/OS®에서 인증되지 않은 SAF 사용자)가
작성됩니다. 보안 제한조건을 정의하지 않거나
EVERYONE의 특수 주제를 애플리케이션에서 요구한 역할에 맵핑한 경우, 인증되지 않은 사용자는 사용자의 서블릿이나 JSP에 액세스할 수 있습니다. ibm-application-bnd.xmi/xml 및
server.xml 파일에서 사용자 대 역할 맵핑을 검토하십시오.
다음 옵션 중 하나를 사용하십시오.
- 서블릿이나 JSP가 보호되지 않은 경우, 보안 제한조건을 사용자 애플리케이션의 배치 디스크립터에 추가하십시오. 인증을 확인하십시오.
- 인증되지 않은 사용자가 사용자의 애플리케이션에 액세스하지 않게 하려면, 해당 역할에 대한 맵핑에서 EVERYONE 특수 주제를 제거하십시오. Liberty 프로파일에서 애플리케이션에 대한 권한 구성을 확인하십시오.
- 특정 사용자에게 사용자의 서블릿 또는 JSP에 대한 권한을 부여할 수 없는 경우, ibm-application-bnd.xmi/xml 및 server.xml 파일을 조사하여 해당 역할로 맵핑된 사용자를 검토하십시오. 역할을 사용자, 그룹 또는 특수 주제에 맵핑할 수 있습니다. 사용자의 역할이 EVERYONE 특수 주제에 맵핑된 경우 모든 사용자가 액세스하도록 허용됩니다. 사용자의 역할이 ALL_AUTHENTICATED 특수 주제로 맵핑된 경우, 인증된 사용자가 액세스하도록 허용됩니다. 서블릿이나 JSP에 액세스할 수 있는 사용자를 추가로 제한하려는 경우 이 특수 주제를 제거하십시오. 마지막으로, 사용자가 속한 그룹을 확인하십시오. 사용자가 명시 액세스 권한을 가질 수 없더라도 그룹은 해당 역할에 맵핑될 수 있습니다. 이 경우, 권한 부여된 그룹에서 사용자를 제거하거나 역할 맵핑에서 그룹을 제거하십시오. Liberty 프로파일에서 애플리케이션에 대한 권한 구성을 확인하십시오.
- 싱글 사인온(SSO)이 작동하지 않습니다.
- SSO가 작동하지 않는 경우, 동일 LTPA 키, 비밀번호, webAppSecurity 요소의 ssoCookieName 속성을 사용하는 다른 Liberty 프로파일 서버에 동일 UTC(Universal Time)가 있으며 동일 사용자 레지스트리가 공유되는지 확인하십시오. 또한 영역을 수정하거나 쿠키가 나타내는 사용자를 제거하는 등의 일관되지 않은 방식으로 사용자 레지스트리를 변경한 후 웹 브라우저로부터 쿠키가 전송되거나 토큰이 만료되는 경우에는 SSO가 실패하며 신임 정보를 다시 입력하라는 프롬프트가 사용자에게 표시됩니다. Liberty 프로파일에 대해 LTPA 쿠키를 사용하여 SSO 구성 사용자 정의을 확인하십시오.
- 보안 공용 API 디버깅.
- 보안이 사용하도록 설정되지 않은 경우(예: 보안 기능 appSecurity-1.0, appSecurity-2.0 또는 zosSecurity-1.0이 지정되지 않은 경우)에도 WSSecurityHelper 및 RegistryHelper가 로드됩니다. 보안이 사용 불가능한 경우, WSSecurityHelper.isServerSecurityEnabled() 및 WSSecurityHelper.isGlobalSecurityEnabled() 메소드 모두가 false를 리턴하며 RegistryHelper.getUserRegistry() 메소드는 널을 리턴합니다.
보안이 사용 불가능한 경우 기타 보안 공용 API 클래스를 로드하지 못할 수 있습니다. 이 클래스에 액세스하려고 하는 경우 클래스 중 하나에서 메소드를 호출하려고 하면 java.lang.NoClassDefFoundError 예외가 발생할 수 있습니다.
-
java.lang.NoClassDefFoundError 예외가 발생하지 않도록, WSSecurityHelper.isServerSecurityEnabled() 또는 WSSecurityHelper.isGlobalSecurityEnabled() 클래스를 호출하여 보안이 사용 가능한지 여부를 확인하기 위해 먼저 테스트한 다음, 보안이 사용 가능한 경우에만 기타 보안 공용 API 클래스를 호출하십시오. 이 코딩 기술의 예제는 보안 공용 API의 내용을 참조하십시오.
- 참고: 이 동작은 전체 프로파일과 다릅니다. 전체 프로파일에서, 모든 클래스는 보안이 사용 가능한지 여부와 상관없이 항상 로드됩니다.
- 유니코드 문자를 가진 사용자를 인증할 수 없음
- 이름에 유니코드 문자가 포함된 사용자를 인증하려면 다음의 jvm 옵션을
서버 시작 명령에 추가하여 Liberty 서버에서 사용하는 문자 인코딩 유형을
UTF-8로 설정해야 합니다.
-Dclient.encoding.override=UTF-8
또한 로그인 페이지에서 charset 및 pageEncoding을 지정해야 합니다. 로그인 JSP 페이지에서 이 매개변수를 지정하는 예제는 다음과 같습니다.<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
java.lang.annotation.AnnotationFormatError: java.lang.IllegalArgumentException: sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:87)에 있는 상수 풀 인덱스의 유형이 잘못됨
이 오류는 OpenID Connect 또는 OAuth 제공자가 일부 JDK 7 버전에 대한 클라이언트 등록에 데이터베이스 저장소를 사용할 때 발생할 수 있습니다.
이 문제점을 방지하려면 JDK 버전 7.1로 업그레이드하십시오.
LDAP 문제점 해결
이 절은 일부 공통 LDAP 문제점과 선택할 수 있는 솔루션을 설명합니다.
- FFDC1015I: An FFDC Incident has been created: javax.naming.ServiceUnavailableException: myldapserver.mycompany.com:636; socket closed com.ibm.ws.security.registry.ldap.internal.LdapRegistry 298
- messages.log의 이 메시지는 구성된 LDAP 서버에 도달할 수 없다는 것을 표시합니다. LDAP 서버를 검사하여 실행 중이며 IP 주소를 Liberty 프로파일 서버에서 액세스할 수 있는지 확인하십시오.
- The javax.naming.CommunicationException: simple bind failed: myldapserver.mycompany.com:636 [Root exception is javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.g: PKIX path building failed: java.security.cert.CertPathBuilderException: unable to find valid certification path to requested target]
- LDAP 서버의 서명자를 LDAPSSLSettings 요소에서 참조된 신뢰 저장소로 복사하지 않고 LDAP 서버에서 SSL을 사용 가능하게 설정한 경우, LDAP 서버와의 연결이 SSL 핸드쉐이크 오류로 실패합니다. LDAP 서버의 서명자를 신뢰 저장소로 복사하는지 확인하십시오.
- The javax.naming.CommunicationException: myldapserver.mycompany.com:389 [Root exception is java.net.BindException: Address already in use: connect]
- 이 메시지는 FFDC 로그에 표시될 수 있으며 로컬 서버에서 사용 가능한 소켓이 소모되어 LDAP 서버에 연결할 때 실패함을 표시합니다. 소켓이 사용되지 않는지 확인하고 다시 시도하십시오.
- CWWKS1100A: 사용자 ID xxxxx에 대한 인증이 성공하지 못했습니다. 지정된 사용자 ID나 비밀번호가 올바르지 않습니다.
- 로드 부하가 많은 경우 메시지에 나와 있는 사용자가 LDAP 서버의 유효한 사용자라도 이 FFDC 예외가 발생할 수 있습니다. LDAP 구성을 사용하면 reuseConnection=false 특성을 추가하거나 개발자 도구를 사용하여 이를 사용 안함으로 설정할 수 있습니다. 문제점을 해결하려면 이 특성을 기본값인 true로 설정하십시오.
SSL 문제점 해결
이 절은 일부 공통 SSL 문제점과 선택할 수 있는 솔루션을 설명합니다.
- CWWKS9105E: 자동 경로 재지정을 위한 SSL 포트를 판별할 수 없습니다.
- SSL 포트로 경로 재지정하고 SSL 포트가 사용 가능하지 않은 애플리케이션에 사용자가 액세스하려고 하는 경우 이 오류가 발생합니다. 누락된 SSL 구성 또는 SSL 구성 정의의 일부 오류 때문에 포트를 사용할 수 없습니다. server.xml 파일에서 SSL 구성이 존재하고 올바른지 확인하십시오. Liberty 프로파일과의 통신 보안을 확인하십시오.
- FFDC1015I: FFDC 인시던트가 작성되었습니다: "java.lang.IllegalArgumentException: 알 수 없는, 불완전한 구성: ID 필드 com.ibm.ws.config.internal.cm.ManagedServiceFactoryTracker aSyncReadNupdate가 누락되었습니다. Exception thrown while trying to read configuration and update ManagedServiceFactory. 예외 = java.lang.IllegalArgumentException: 알 수 없는, 불완전한 구성: ID 필드 누락"(위치: ffdc_12.04.18_16.09.42.0.log)
- ID 필드가 없는 구성에 keystore 요소가 있는 경우 이 오류가 발생합니다. 최소 SSL 구성을 사용하는 경우 ID 필드를 defaultKeyStore로 설정하십시오.
- sslEnabled 및 sslRef 값이 있는 LDAP 사용자 레지스트리가 지정되지 않은 경우 예외가 발생할 수 있습니다.
- 예를 들어, 다음 예제에서 보는 것처럼 구성에서
sslEnabled가 true로 설정되었지만 sslRef
값이 없습니다.
<ltldapRegistry id="ldap" realm="SampleLdapIDSRealm" host="ccwin12.austin.ibm.com" port="636" ignoreCase="true" baseDN="o=ibm,c=us" bindDN="cn=root" bindPassword="rootpwd" ldapType="IBM Tivoli Directory Server" idsFilters="ibm_dir_server" sslEnabled="true" searchTimeout="8m" />
sslRef 값을 입력해야 합니다. 최소 SSL 구성을 사용 중인 경우, 다음과 같습니다.
sslRef 필드는 defaultSSLConfig로 설정되어야 합니다.<ltkeyStore id="defaultKeyStore" location="key.jks" password="mypassword" />
사용자 정의 SSL 구성을 구성한 경우 해당 구성의 이름을 sslRef 필드에 배치해야 합니다.
- WebSphere Application Server의 JDK를 사용하는 경우, SSL이 Liberty Server에서 사용 가능한 경우 다음 오류가 표시될 수 있습니다.
-
java.net.SocketException: java.lang.ClassNotFoundException: Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory at javax.net.ssl.DefaultSSLSocketFactory.a(SSLSocketFactory.java:11) at javax.net.ssl.DefaultSSLSocketFactory.createSocket(SSLSocketFactory.java:6) at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:161) at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:36) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1184) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:390) at com.ibm.net.ssl.www2.protocol.https.b.getResponseCode(b.java:75) at com.ibm.ws.jmx.connector.client.rest.internal.RESTMBeanServerConnection.loadJMXServerInfo(RESTMBeanServerConnection.java:142) at com.ibm.ws.jmx.connector.client.rest.internal.RESTMBeanServerConnection.<init>(RESTMBeanServerConnection.java:114) at com.ibm.ws.jmx.connector.client.rest.internal.Connector.connect(Connector.java:315) at com.ibm.ws.jmx.connector.client.rest.internal.Connector.connect(Connector.java:103)
이 오류는 WebSphere Application Server SSL 소켓 팩토리가 Liberty 프로파일에 의해 지원되지 않기 때문에 발생합니다. 다음과 같은 단계를 수행하여 이 문제점을 통과할 수 있습니다.- 다음과 같은 두 개의 비어 있는 항목을 포함한 텍스트 파일(예: my.java.security)을 작성하십시오.
ssl.SocketFactory.provider= ssl.ServerSocketFactory.provider=
- Liberty 서버에 대해 jvm.options 파일을 작성하십시오.
- 방금 작성한 텍스트 파일의 전체 경로를 포함하는 다음 특성을 jvm.options 파일에 추가하십시오.
-Djava.security.properties=fullPathTo/my.java.security
- 이 파일을 더욱 재사용가능하게 하려면 my.java.security 파일을 서버 디렉토리에 둘 수 있습니다. 그러면 다음과 같은 상대 경로를
사용할 수 있게 됩니다.
-Djava.security.properties=./my.java.security
자세한 정보는 Liberty 프로파일 환경 사용자 정의의 내용을 참조하십시오.
- 다음과 같은 두 개의 비어 있는 항목을 포함한 텍스트 파일(예: my.java.security)을 작성하십시오.
CORBA/IIOP 문제점 해결
이 절에는 몇 가지 일반적인 CORBA 문제점과 이에 대해 선택할 수 있는 해결책이 설명되어 있습니다.
- WebSphere Application Server의 JDK를 사용하는 경우에는 애플리케이션이 CORBA/IIOP 통신을 사용할 때 다음 오류가 표시될 수 있습니다.
15:21:58.096 com.ibm.rmi.pi.InterceptorManager runPreInit:178 Init Process ORBRas [default] java.lang.ClassNotFoundException: com.ibm.ISecurityLocalObjectBaseL13Impl.CSIClientRI at com.ibm.CORBA.iiop.UtilDelegateImpl.loadClass(UtilDelegateImpl.java:685) at javax.rmi.CORBA.Util.loadClass(Util.java:246) at com.ibm.rmi.pi.InterceptorManager.runPreInit(InterceptorManager.java:172) at com.ibm.rmi.corba.ORB.initializeInterceptors(ORB.java:664) at com.ibm.CORBA.iiop.ORB.initializeInterceptors(ORB.java:1084) at com.ibm.rmi.corba.ORB.orbParameters(ORB.java:1359) at com.ibm.rmi.corba.ORB.set_parameters(ORB.java:1271) at com.ibm.CORBA.iiop.ORB.set_parameters(ORB.java:1694) at org.omg.CORBA.ORB.init(ORB.java:371) ...
이 오류는 WebSphere Application Server ORB(Object Request Broker) 인터셉터를 Liberty 프로파일에서 지원하지 않아 발생합니다. 이 문제점은 JDK에서 이러한 인터셉터를 사용하지 않도록 orb.properties 파일을 편집하여 해결할 수 있습니다. 이 파일은 보통 <JAVA_HOME>/jre/lib directory 디렉토리에 있으나, 사용자의 <USER_HOME> 디렉토리에 있는 사본으로 이를 대체했을 수도 있습니다. 다음 예제에는 주석 처리해야 하는 orb.properties 파일의 행이 표시되어 있습니다.
# WS Interceptors #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ws.Transaction.JTS.TxInterceptorInitializer #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ejs.ras.RasContextSupport #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ISecurityLocalObjectBaseL13Impl.ClientRIWrapper #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ws.activity.remote.cos.ActivityServiceClientInterceptor #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ISecurityLocalObjectBaseL13Impl.CSIClientRI #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.debug.olt.ivbtrjrt.OLT_RI #org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ws.wlm.client.WLMClientInitializer # WS ORB & Plugins properties #com.ibm.ws.orb.transport.ConnectionInterceptorName=com.ibm.ISecurityLocalObjectBaseL13Impl.SecurityConnectionInterceptor
로깅 및 추적 문제점 해결
이 절에서는 로깅 및 추적에 대한 몇몇 공통 문제점에 대해 설명합니다.
- java.util.logging -- Java 로깅 프로그래밍 인터페이스
- Liberty 프로파일은 logging.properties 파일을 사용하여 java.util.logging을 구성하는 것을 지원하지 않습니다. 예를 들어, 배치된 애플리케이션 또는 사용자 기능에서 java 코드를 사용하여 java.util.logging 핸들러, 필터 또는 포맷터를 작성하고 추가하십시오.
- Liberty 프로파일 서버는 로깅 구성 요소의 traceSpecification 속성에 따라 java.util.logging 로거 레벨을 관리하므로 Logger.setLevel 메소드는 사용하지 않아야 합니다.


아카이브 설치에 수정팩 및 임시 수정사항 적용
Installation Manager를 사용하지 않고 아카이브 파일에서 Liberty 프로파일 런타임 환경을 설치한 경우, 서비스 업데이트를 적용할 때 특수 측정을 사용해야 합니다. 자세한 정보는 Liberty 프로파일 Java 아카이브 설치에 수정팩 적용 및 Liberty 프로파일 아카이브 설치에 임시 수정사항 적용의 내용을 참조하십시오.
성능 문제점 해결
이 절에서는 몇몇 공통 성능 문제점 및 사용자가 선택할 수 있는 솔루션에 대해 설명합니다.
- 애플리케이션 모니터의 높은 CPU 사용량
-
이 오류는 애플리케이션 모니터가 apps/ 디렉토리 아래에 다수의 파일을 가지고 있을 때 너무 자주 폴링을 수행하는 경우 발생할 수 있습니다.
이 문제를 방지하기 위해 많은 항목을 변경할 수 있습니다.
- pollingRate 속성의 값을 늘리십시오.
- server.xml을 업데이트하여 polled가 아닌
updateTrigger를 가진 applicationMonitor 요소를
포함하십시오.
server.xml <applicationMonitor updateTrigger="mbean" />
- apps/ 디렉토리 아래의 파일 수를 줄이십시오.
applicationMonitor 요소에 대한 자세한 정보는 동적 업데이트 제어의 내용을 참조하십시오.