가상 메모리가 부족하다는 메세지가 나오는데 [6]

가상 메모리가 부족하다는 메세지가 나오는데

2000-09-22 00:00 - 박종호

이건 제가 못보고 현장 근무자가 본 것을 듣고 옮긴거라
정확하지는 않습니다.

'X-Manager가 가상메모리가 부족합니다'

라는 메세지가 나온다는데 원인이 무엇일까요?

현재 응용 프로그램은 UNIX워크스테이션이 XChangeWindowProperty()하여 뉴스를 보내면,
X-Manager에게 데이타가 전달되어 X-Manager노드에서 실행시킨 응용프로그램이
XGetWindowProperty()하여 가져옵니다.

응용프로그램은 동적 메모리 관리에 아무 문제가 없으며, 시스템 메세지도 나오지 않습니다.

일전에 X-Manager 노드에서 응용프로그램이 core dump로 죽어,
워크스테이션에 뉴스 엔트리 삭제를 요청하지 못했을 때,
워크스테이션에서 계속 X-Manager 노드로 뉴스를 보내어
PC에서 가상메모리 처리를 한다고 디스크가 엄청나게 움직이는 것을 본적은 있습니다만,
현재는 프로그램이 죽지도 않았는데 그런 증상이 나타납니다.


가상 메모리가 부족한 경우

2000-09-22 00:00 - 넷사랑

가상 메모리가 부족한 경우는 다음과 같습니다.

1. 절대적으로 주 메모리가 부족한 경우
이 경우는 페이징으로 처리할 수 없을 정도로 상주 데이타가
클 경우에 발생합니다. 주 메모리를 늘이면 해결됩니다.

2. 하드디스크에 여유가 없을 때
이 경우는 디스크 용량만 충분히 늘이면 됩니다.
응용 프로그램에 따라 다르지만 일반적으로 100M 이상이면 됩니다.

3. Xmanager에 데이타가 무한정 증가할 때
이 경우는 해결 방법이 없습니다. 무한정 증가한다면 언젠가는
디스크도 full 상태가 됩니다. X 응용 프로그램을 수정해야 합니다.

4. 윈도우 커널 오류 (대개는 네트워크 드라이버 문제)
랜카드의 드라이버를 최신 버전으로 업그레이드 하거나
랜카드를 교체합니다. 이 경우는 특정 PC만 문제가 발생합니다.

5. Xmanager 오류
이 경우도 가능하며 Xmanager를 수정해야 합니다.

먼저 시스템 사양을 확인해 보시고 가능성을 분석해 보는 게 좋을 듯 싶습니다.
그리고 뉴스를 Property로 저장하신다고 하셨는데, 이 데이타가 알고리즘에
문제가 있을 때 계속 증가할 수 있는 구조인지 궁금합니다. 즉, 뉴스 엔트리를
삭제하라는 요청이 없는 경우 계속 데이타가 증가되며, 프로그램이 살아 있어도
삭제 요청을 못하는 경우가 있는지 여부를 확인해 볼 필요가 있습니다.

우선 뉴스엔트리의 데이타 플로우와 이벤트 플로우가 정의되어 있다면
도움을 드릴 수 있을 것 같습니다.



가상 메모리가 부족한 경우

2000-09-25 00:00 - 박종호

지금 3일째 본사에서 시뮬레이션 해봤는데
동일한 메세지가 나오지 않습니다.

현장이 보통 10,000건/1일 정도의 뉴스 브로드캐스팅이 발생하는데
본사에서 100,000건/1일 정도로 해놓아도 죽지 않는군요.

결국 개별 PC문제인 것 같습니다.


증상이 재현되었습니다.

2000-09-25 00:00 - 박종호

3일만에 증상이 재현되었습니다.

원인이 이렇더군요.

1.Xmanager가 정상적으로 작동한다 - W/S에서 응용X-Client도 정상적으로 작동한다. - 응용DB Server도 정상작동한다.

2.Xmanager가 갑자기 죽는다 - W/S에서 응용X-Client은 계속 정상작동한다. - 응용 DB-Server가 죽는다.(단 뉴스 엔트리가 제거되지 않고 있음)

3.Xmanager를 재 기동한다 - W/S에서 응용X-Client는 계속 정상작동한다.(그러나 데몬화되어 화면에는 안나타남) - 응용 DB Server를 재 기동한다.

4.Xmanager가 가상메모리 SWAP처리를 계속한다. - W/S에서 응용X-Client는 계속 정상작동한다. - 응용 DB Server도 정상작동한다.

5.PC에서 메모리가 부족하다는 메세지가 나온다. - W/S에서 응용X-Client는 계속 정상작동한다 - 응용 DB server가 죽는다.

.. 계속 반복(3~4일 정도주기로 반복됨)

6.DB Server - W/S - PC를 모두 Rebooting한다.
-> W/S에서 동일한 상황발생시까지 안죽고 시스템이 운영된다.

시뮬레이션 중에,
Netscape띄우고 사용하다가 Xmanager가 갑자기 죽는 바람에 증상이 확인되었습니다.

어떻게 해결해야 될까요?



Xmanager가 다운될 때 X Client도 종료되어야...

2000-09-25 00:00 - 넷사랑

Xmanager가 다운되면 X Client는 대개 read/write를 하다가 오류가
발생하게 됩니다. 이 때 기본적인 처리 루틴은 프로그램을 종료하는
것입니다. 그래서 Xmanager가 다시 기동하면 이전에 연결되었던
X Client는 Xmanager와 전혀 상관없이 없게 됩니다. 즉 다시 연결을
해야 한다는 것이죠.

만약 X Client가 종료되지 않고 기다리다가 DISPLAY 번호 체크해서
다시 XOpenDisplay를 하게 되면 앞에서 언급하셨던 문제가 발생할
수 있습니다.

어쨌든 X Client는 Xmanager가 예고없이 다운된다는 가정을 하고
동작을 해야 합니다. Xmanager가 아니더라도 윈도우 자체가 다운될
수도 있기 때문이죠.

그리고 넷스케이프를 실행하다가 문제가 발생했다고 하셨는데
어떤 오류가 발생했는 지를 알려 주시면 감사하겠습니다.


Xmanager가 죽었는지 주기적으로 체크해야 한다면

2000-09-25 00:00 - 박종호

응용 X-Client입장에서는 부하가 너무 많은데

어떻게 좋은 방법이 없을까요?

Xmanager가 죽으면서 자동으로 W/S에 통보하는 어떤 정보가 없습니까?
(XEvent 루프내에서 손쉽게 case문으로 검색할 수 있는..)

현재 X-Client는 아래와 같은 mainloop를 가지고 있습니다.

while(TRUE)
{
XtNextEvent(&Gevent);
switch(Gevent.type) {
case PropertyNotify : function1(); break;
case KeyPress :
case KeyRelease : function2(); break;
case ButtonPress :
case ButtonRelease : function3(); break;
case MotionNotify : function4(); break;
.
.
case ClientMessage : functionX(); break;
default : function_default(); break;
}
}

그리고
Netscape실행시 아무런 에러 메세지도 없이 그냥 Xmanager가 죽었습니다.
Netscape를 전화면으로 확대해놓고 쓰다가 종료해보고 나니까,
죽어 있었습니다.

저도 왜 죽었는지 알고싶어 Xmanager.log파일을 열어봤는데 아무메세지도
없더라구요.


네트워크 에러가 발생할 때 종료하면...

2000-09-25 00:00 - 넷사랑

이런 종류의 문제는 네트워크 read/write를 할 때 상대방의
종료 여부를 알아 낼 수 있습니다.

즉, 클라이언트 입장에서는 서버에 무언가를 request할 때가
있습니다. 이 때 패킷이 전달되지 않으면 request 에러가
나옵니다. 또는 서버로부터 뭔가를 읽을 일이 있는데 read가
안되면 연결 종료로 판단합니다.

만약 아무것도 읽고/쓸게 없다면 X 클라이언트는 하는 일 없이
가만히 있게 됩니다. 따라서 Xmanager와는 아무 상관이 없이
잠자고 있는 겁니다.

제가 알기로는 그쪽에서 만든 X 클라이언트는 X 서버로부터도
이벤트를 받고 HP내의 프로그램끼리도 서로 연결하는 걸로
알고 있습니다. 즉, X 서버에서 아무런 이벤트도 발생하지 않아도
자체적으로 통신을 하다가 X 서버에 뭔가를 요구할 일이 발생한다는
얘기죠. 이 때 네트워크의 write 에러를 감지해 낼 수 있습니다.
네트워크 에러는 기본 처리 루틴이 있는데 아마 exit(1)을 하지
않을까 생각합니다.


이전 조회수: 101