2012-08-08 5 views
1

tomcat 6과 테라코타 3.5.4를 사용하여 liferay 6.0.6을 사용하고 있습니다. 테라코타가 다른 서버에 설치되어 정상적으로 작동합니다.RedHat에서는 tomcat 6을 사용하지만 debian에서는 그렇지 않습니다.

debian 및 redhat 시스템은 가상 시스템이며 완전히 동일한 가상 하드웨어를 사용합니다. 1CPU, 4GB RAM, 둘 다 64 비트 OS.

java version "1.6.0_24" 
OpenJDK Runtime Environment (IcedTea6 1.11.3) (rhel-1.48.1.11.3.el6_2-x86_64) 
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode) 

메신저 데비안 시스템을 사용하여 예상대로 다음 모든 작품 응용 프로그램을 부팅합니다. 레드햇 시스템을 이용한 메신저 그때 오류가 발생하는 경우

는 :

java.lang.OutOfMemoryError: unable to create new native thread 
    at java.lang.Thread.start0(Native Method) 
    at java.lang.Thread.start(Thread.java:657) 
    at java.util.Timer.<init>(Timer.java:176) 
    at com.tc.object.locks.ClientLockManagerImpl.<init>(ClientLockManagerImpl.java:39) 
    at com.tc.object.StandardDSOClientBuilder.createLockManager(StandardDSOClientBuilder.java:190) 
    at com.tc.object.DistributedObjectClient.start(DistributedObjectClient.java:639) 
    at com.tc.object.bytecode.ManagerImpl$2.execute(ManagerImpl.java:263) 
    at com.tc.lang.StartupHelper.startUp(StartupHelper.java:39) 
    at com.tc.object.bytecode.ManagerImpl.startClient(ManagerImpl.java:281) 
    at com.tc.object.bytecode.ManagerImpl.init(ManagerImpl.java:202) 
    at com.tc.object.bytecode.ManagerImpl.init(ManagerImpl.java:190) 
    at com.tc.object.bytecode.hook.impl.DSOContextImpl.createStandaloneContext(DSOContextImpl.java:179) 
    at org.terracotta.express.StandaloneL1Boot.call(StandaloneL1Boot.java:190) 
    at org.terracotta.express.ClientImpl.<init>(ClientImpl.java:309) 
    at org.terracotta.express.ClientFactoryImpl.newClient(ClientFactoryImpl.java:232) 
    at org.terracotta.express.ClientFactoryImpl.createClient(ClientFactoryImpl.java:225) 
    at org.terracotta.express.ClientFactoryImpl.createClient(ClientFactoryImpl.java:212) 
    at org.terracotta.express.ClientFactoryImpl.getOrCreateClient(ClientFactoryImpl.java:190) 
    at org.terracotta.express.ClientFactory.getOrCreateClient(ClientFactory.java:28) 
    at net.sf.ehcache.terracotta.StandaloneTerracottaClusteredInstanceFactory.<init>(StandaloneTerracottaClusteredInstanceFactory.java:37) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 

이 오류의 이상한 부분은 메모리를 사용하지 않는 점이다. 나는 Xmx를 3500m로 설정했지만 메모리 사용량은 2.3GB 이상으로 올라가지 않습니다.

나는 가능한 원인에 대한 검색 및이를 발견했습니다 Low Java single process thread limit in Red Hat Linux

그래서 난 내에서는 ulimit -n을 변경하고 ulimit를 -u는 80000에 여전히 아무것도 변경되지 않습니다.

는 그때 나는 또한 그럼 내가 다시 부팅

fs.file-max = 100000 

/etc/sysctl.conf에 편집

*  soft nproc   81920 
*  hard nproc   81920 
*  soft nofile   81920 
*  hard nofile   81920 

내는 /etc/security/limits.conf 편집.

나는 또한 내가 에코 실행

을 -Xss5000k하는 내가 -Xss 증가

내 setenv.sh에 -Xms = 2g을 추가 200000>/proc 디렉토리/sys 인/커널/스레드 - 최대

그러나 여전히 같은 오류가 발생합니다. 어떤 아이디어? 단지 충돌

   total  used  free  shared buffers  cached 
Mem:   3963  2897  1065   0   31  823 
-/+ buffers/cache:  2043  1920 
Swap:   2047   18  2029 

업데이트하기 전에

   total  used  free  shared buffers  cached 
Mem:   3963  1027  2935   0   25  748 
-/+ buffers/cache:  253  3709 
Swap:   2047   18  2029 

무료 -m 부팅의 시작에서

무료 -m : 나는 또한 기가 바이트 램과 같은 결과로 기계와 시도가 나타납니다.

+0

JRE는 동일한가요? RHT 시스템에 * free -m * 출력을 게시 할 수 있습니까? –

+0

JRE가 동일합니다. – SpikerTom

+0

OpenJDK Runtime Environment (IcedTea6 1.11.3) (rhel-1.48.1.11.3.el6_2-x86_64) OpenJDK 64 비트 서버 VM (빌드 20.0-b12, 혼합 모드) – SpikerTom

답변

2

Java 프로세스는 여러 메모리 풀을 포함합니다. java memory structure

OutOfMemory 오류 : 스택 할당을위한 Java 프로세스의 공간이 충분하지 않습니다.

  • 그래서 당신은 당신이 당신의 응용 프로그램에서 덜 스레드에게 수를 시작할 수 있습니다 -Xss 풀을 증가합니다. -Xss 매개 변수를 줄이십시오. 스레드 큰 스택을 사용하면 special constructor으로 시작할 수 있습니다.
  • 또한 힙 (힙이 반드시 사용해야하는 것은 아님)에 메모리가 할당되어 있으므로 적은 메모리를 스택에서 사용할 수 있으므로 힙 메모리를 줄일 수 있습니다.
  • 더 잘 응용 프로그램 구조를 검토하고 ThreadPool 또는 e.t.c를 사용하여 응용 프로그램에서 스레드 수를 줄이십시오.
+0

설명대로 노력했습니다. JAVA_OPTS = "$ JAVA_OPTS -Dfile.encoding = UTF8 -Duser.timezone = 유럽/파리 -Xss512k -Xmx2g -Xms1g -XX : MaxPermSize = 512m -Djava.net.preferIPv6Addresses = false -Djava.net.preferIPv4Stack = true"그러나 이전과 같이 저장 오류를 제공합니다. 우분투에서는 부팅이 잘되지만 레드햇에서는 부팅되지 않습니다. – SpikerTom

+0

그래서 나는 Xss 값을 256k로 더 줄였다. (128kb는 저에게 넘치는 오류를줍니다). 이것은 나에게 똑같은 오류를 다시 준다. 물건에 그것은 정확히 나에게 전에 같은 지점에서 오류를 제공합니다. – SpikerTom

+0

애플리케이션에 몇 개의 스레드가 있습니까? 귀하의 경우에 소스 코드를 편집 할 수 있습니까? – Taky

관련 문제