2012-03-20 3 views
3

저는 현재 Weblogic Java EE 프로젝트에서 일하고 있습니다.이 프로젝트에서는 수시로 애플리케이션이 Perl 스크립트를 실행하여 일부 배치 작업을 수행합니다. 응용 프로그램에서 스크립트가 실행하는 위험한 방법이지만weblogic Java EE 애플리케이션에서 Perl 스크립트를 실행하는 가장 좋은 방법

Process p = Runtime.getRuntime().exec(cmdString); 

로 호출지고, 그러나 우리는 루프 기적에서 스크립트를 실행하는 요구했다 때까지 제대로 작동했다. 몇 번 실행 한 후 우리는 java.io.IOException: Not enough space을 얻고 있습니다. 아마도 for 루프에서 실행 중일 때 가상 메모리가 부족할 것입니다. 결과적으로 우리는 서버에서 스크립트를 전혀 실행할 수 없습니다.

필자는 부모 프로세스를 포크 할 필요가 없거나 적어도 모든 스왑 공간을 먹지 않는 Perl 스크립트를보다 안전하고 안전하게 실행할 수있는 방법을 찾고 있습니다. 다음과 같이

사양은 다음과 같습니다

Appserver - Weblogic 9.52 
JDK - 1.5 
OS - SunOS 5.10 
Sun-Fire-T200 
+0

64 비트 JVM을 실행하고 있습니까? –

답변

0

코드를 변경하지 않고 디스크 여유 공간이 충분하면 OS에 충분히 큰 스왑 영역을 추가하면됩니다. 당신은 ZFS를 사용하는 경우

mkfile 10g /export/home/10g-swap 
swap -a /export/home/10g-swap 
echo "/export/home/10g-swap - - swap - no -" >> /etc/vfstab 

, 즉 다음과 같습니다 : 그 큰 걱정하지 마십시오

zfs create -V 10gb rpool/swap1 
swap -a /dev/zvol/dsk/rpool/swap1 

는 10 GB의 필요 가정, 여기 당신이 UFS와 함께 할 방법입니다 스왑은 가상 메모리 예약에만 사용되며 페이지 매김에는 사용되지 않으므로 성능에 미치는 영향은 없습니다.

그렇지 않으면 앞의 대답에서 이미 제안한 것처럼 가상 메모리 문제를 피하는 한 가지 방법은 도우미 프로그램, 즉 네트워크 소켓 (또는 ssh와 같은 상위 프로토콜) 그리고 perl 스크립트를 "원격으로"실행합니다.

이 문제는 32 비트 또는 64 비트 JVM과 관련이 없습니다. 솔라리스가 메모리를 과도하게 커밋하지 않고 의도적으로 설계된 것입니다.

1

나는 경우의 커플에 비슷한 했어. 자식 프로세스는 (매우 큰 부모의 포크이기 때문에 모든 것이 그것의 메모리를 공유한다는 것을 볼 수있다. (copy on write를 사용한다.) 내가 발견 한 것은 커널이 모든 것을 복사 할 수 있어야한다는 것이다. 당신이 정말로 빠른 가상 머리 실행의 부족 32 비트 OS에, 아이를 분기 전에 메모리 페이지

가능한 해결책 :.

  • 를 사용하여 64 비트 OS와 JVM은 지금까지 도로의 아래 문제를 밀어 그것을 중요하지 않음
  • 다른 프로세스 (예 : HTTPD)에서 스크립트를 호스팅하고 HTTP 요청을 사용하여 스크립트를 호출하여 호출하십시오.
+0

첫 번째 해결책은 그대로 작동하지 않습니다. 어쨌든 SPARC 용 32 비트 Solaris 10도없고 JVM이 32 또는 64 비트인지에 따라 차이가 없습니다. – jlliagre

+0

필자의 경험은 리눅스와 관련이 있으며, 모든 차이점을 만들었습니다. 64 비트 커널은 가상 주소 공간이 충분하기 때문에 항상 포크 할 수 있어야합니다. –

+0

리눅스는 메모리를 과도하게 커밋하므로 실제로 64 비트 커널로 전환하면이 OS에서 거의 무제한으로 메모리를 예약 할 수 있습니다. Solaris에는 적용되지 않습니다. 64 비트 커널은 Anindya가 실행하고있는 문제이며 거기에 문제가 있습니다. 솔라리스에서 64 비트 JVM은 실제로 풋 프린트가 더 커질수록 문제를 악화시킵니다. – jlliagre

1

네트워크를 통해 perl 스크립트를 읽고 perl-server를 하나씩 실행하는 perl-server를 만듭니다.

관련 문제