반응형

 

AIX에서 각각의 라이브러리 버전을 확인하고자 할 때 어떻게 해야하는지 한참 찾다가 드디어 발견..

컴파일 후 다른 머신에서 실행시 발생하는 동적 라이브러리 버전 때문에 확인해야 할 경우 미리 확인하면 유용할 듯..

 

--------------------------------------------------------------------------------------

exec(): 0509-036 다음 오류 때문에 <프로그램 명> 프로그램을 로드할 수 없습니다.
0509-130 <프로그램 명>에 대한 기호 해상도가 다음 이유 때문에 실패했습니다.
0509-136 __pth_init(번호 134) 기호가 종속 모듈
/lib/libpthread.a[shr_xpg5_64.o]에서 반출되지 않았습니다.
0509-192 'dump -Tv' 명령으로 .loader 섹션 기호를
시험하십시오.

--------------------------------------------------------------------------------------

뭐 대략 이런 에러 .... ㅡㅡ... 산산조각 깨졌네요 허허허

해당 에러가 나올 때는 AIX 라이브러리 셋 을 570+으로 업그레이드 하라는데...

5.3.7.0 이상으로 하라는건가...? 뭐 어쨋든 컴파일한 머신과 라이브러리 버전이 같다면 큰 문제는 없을듯.

 

근데 어디서 어떻게 라이브러리를 업데이트 받는걸까..

혹시 지나가시다가 아시는 분 생기시면 댓글 달아주시면 정말 감사드릴텐데.. ㅋ

 

 

명령어

lslpp -al

옵션은 al 정도만 사용해도 충분하게 다 커버할 수 있는 듯하다 필요하다면 man으로 자세한 내용을 확인하자

아래는 실제로 커맨드시 출력되는 내용들

 

 

 

 

우선 OSLEVEL을 확인하시려면

#> oslevel -r

5300-04

 

와 같이 뜨구요.

xlC 컴파일러 라이브러리 파일셋을 보려면

 

#> lslpp -l xlC*rte

  파일 세트                     레벨  상태       설명
  ----------------------------------------------------------------------------
경로: /usr/lib/objrepos
  xlC.aix43.rte              4.0.2.2  확정됨     C Set ++ Runtime for AIX 4.3
  xlC.aix50.rte             10.1.0.0  확정됨     XL C/C++ Runtime for AIX 5.3
  xlC.rte                     10.1.0.0  확정됨     XL C/C++ Runtime

 

뭐 요렇게 나오네요..

또한 해당 라이브러리의 파일셋이 어디인지 알고 싶다면 -w 옵션을 사용.

#> lslpp -w /usr/lib/libpthreads.a

  파일                                        파일 세트             유형
  ----------------------------------------------------------------------------
  /usr/lib/libpthreads.a             bos.rte.libpthreads   Symlink

 

해당 라이브러리의 인스톨 및 언데이트 히스토리를 알고 싶다면 -h 옵션을 사용

 

#> lslpp -h bos.rte.libpthreads

  파일 세트       레벨      조치         상태         날짜         시간
  ----------------------------------------------------------------------------
경로: /usr/lib/objrepos
  bos.rte.libpthreads
                  5.3.8.0   확정         완료         09/07/09     01:20:56
                  5.3.9.0   확정         완료         10/03/25     14:55:11

이것도 요렇게 친절하게 나옵니다..

 

 

 

 

 

 

반응형
반응형

 




AIX에서 사용하는 사용하는 컴파일러는 IBM에서 제공하는 xl이라는 Compiler가 쓰인다.

이 xl은 xlc로도 쓰이며 _r 이 붙게 되면 Thread-Safe의 의미가 된다.
정확하게 어떤 부분이 Safe한지는 잘 모르겠다.

xl 씨리즈는 굉장히 많은 종류가 있는데 /usr/vacpp/bin에 보면 C++
그리고 /usr/vac/bin에 보면 C에 해당 하는 컴파일러 종류들을 살펴 볼 수 있겠다.


위의 그림은 /usr/vacpp/bin에 들어있는 컴파일러들의 모습.

-----------------------------------------------------------------------------------------------------------------------------
Hard Link 
똑같은 파일이 복사되어 있는 것으로 원복을 삭제해도 복사본의 내용은 남아 있으며 복사본의 내용을 추가하면 원본의 내용에도 추가되는 구조.

Symbolic Link
원본의 파일에 대한 위치와 정보만을 갖고 있음.
-----------------------------------------------------------------------------------------------------------------------------
위 컴파일러들은 모두 기본적으로 xlc의 Symbolic Link가 걸려 있는데 각자 자신이 호출된 이름에 맞는 동작을 한다고 한다.
따라서 xlc를 사용한 것과 xlC를 사용하는 부분은 구분해야 한다.


-----------------------------------------------------------------------------------------------------------------------------
출처 : http://susukang98.springnote.com/pages/377244.xhtml

오래된 머신에서는 xlc가 깔려 있다고 한다.
AIX에서 사용하는 옵션을 살펴보자면

 Version  [kernel 2.x, GCC 2.95.x and later]  4.3 and Later
 2a  shared library creation flag  -bM:SRE
 2b  shared library creation (C++)  cxx -shared -o
xlC -G (or -qmkshrobj)
obsolete:/usr/vacpp/bin/makeC++SharedLib -G -o
(was in /usr/ibmcxx/bin or /usr/lpp/xlC/bin/)
 2c  static archiver (C++)  ar
 3b  file extension  .so (or .a)
 4  executable link options -brtl
-bdynamic
-Lpath -lname
 5a runtime path specification  -blibpath:<path>
(by default, it is set to the arguments of -L)
 5b   Does not build the path for shared libraries into the executable  -blibpath:/usr/lib:/lib
 7 exports file/link option
(see notes)
 .exp
 9  runtime library path  LIBPATH
 11  runtime debugging  LDR_CNTRL
 17  dynamic loading /
dynamic symbol access
 loadquery/loadbind
(AIX 4.2) dlopen / dlsym
 18  utilities  dump -H
ldd (in AIX tools)
 19  documentation man: ld, dump


-----------------------------------------------------------------------------------------------------------------------------

1. 32bit/64bit 컴파일

기본적으로 AIX용 컴파일러는 프로그램을 32bit 모드로 컴파일한다. 원하는 bit 모드를 지정하려면 컴파일러, 아카이버, 링키지 에디터 등을 위해 아래와 같이 bit 모드 옵션이나 환경변수를 사용할 수 있다.

- 컴파일러 옵션: -q32/-q64

- OBJECT_MODE 환경변수: 32/64

- Archive(ar) 옵션: -X32/-X64/-X32_64

- 링키지 에디터(ld) 옵션: -b32/-b64

아래는 64-bit 오브젝트를 생성하도록 컴파일하고 확인하는 예..
  1. $ xlf -c -q64 bt.f
  2. $ dump -ov -X32_64 bt.o
  3. bt.o:
  4. ***Object Module Header***
  5. # Sections Symbol Ptr # Symbols Opt Hdr Len Flags
  6. 4 0x000026fe 81 0 0x0000
  7. Flags=( )
  8. Timestamp = "Feb 14 11:18:07 2002"
  9. Magic = 0x1f7 (64-bit XCOFF)

위와 같이 dump 명령을 사용하면 실행 파일 또는 오브젝트 파일이 32-bit 모드인지 64-bit 모드인지 확인할 수 있는데, 위의 예에서는 '64-bit XCOFF'로 되어 있으므로 64-bit 오브젝트 파일임을 알 수 있다. 또한, dump 명령의 옵션인 -X32_64, -X32, -X64는 대상 파일의 bit 모드를 지정하는 것으로, 모를 때는 위와 같이 -X32_64를 사용하면 된다.

AIX 4.3 환경에서 컴파일한 64-bit 프로그램은 AIX 5L에서는 실행되지 않으므로 AIX 5L용으로 다시 컴파일 해주어야 하지만, 32-bit 프로그램은 AIX5L 이전의 버전에서 컴파일 된 실행파일을 그대로 사용할 수 있다.

운영체제의 32/64-bit 모드는 'ls -l /unix' 명령으로 확인할 수 있는데 /unix가 /usr/lib/boot/unix_64에 링크되어 있으면 64-bit 커널이고, /usr/lib/boot/unix_mp에 링크되어 있으면 32-bit 커널이다.

xlC는 주석을 엄밀히 확인하고 일반적인 c style의 comment에 대해 warnning하는 경우가 있다.

그리고 char type을 default로 unsigned값으로 보고 있다. char타입에 대해 멀티플렛폼으로 작성할 여부가 있는 프로그램의 경우 변수의 type을 char보다는 __uint8같은 명확한 type으로 명확히 정의함이 괜찮은 방법이다.

"sn3crypt.h", line 338.18: 1540-0804 (W) The characters "/*" are detected in a comment.
"sn3ole.h", line 189.73: 1540-0804 (W) The characters "/*" are detected in a comment.
"sn3pcm.h", line 70.17: 1540-0848 (S) The macro name "SN3_ARCHITECTURE" is already defined with a different definition.
"sn3pcm.h", line 54.17: 1540-0425 (I) "SN3_ARCHITECTURE" is defined on line 54 of "sn3pcm.h".
"sn3xls.h", line 51.49: 1540-0804 (W) The characters "/*" are detected in a comment.
make: 1254-004 The error code from the last command is

aix5, xlC컴파일러에서 next를 실행한 오류

컴파일을 하다가 난 warnning과 error이다. 여러 플렛폼에 있는 다양한 컴파일러로 컴파일을 할때 한번에 되지 않느다면 역시 컴파일러의 옵션을 봐야 한다. 여러종류의 컴파일러를 만났을 때 당황하지 말고 믿을 수 있는 것은 컴파일러에서 생성한 경고나 오류, 그리고 컴파일러 옵션임을 잊지 않는다.

위의 경우는 (W)는 warnning (S)에서 에러를 냈으므로 70 line을 찾는다.






반응형
반응형


출처 : http://kldp.org/node/92461

-------------------------------------------------------------------

질문 :
안녕하세요 코딩하다가 삽질하다가 의문의 생겨 질문 올립니다.

동적 메모리 할당에서요
malloc / new 를 하고서
free / delete를 했는데 프로세스가 OS로 메모리 반환을 하지 않네요...

pa aux | grep "프로세스명" 해서 메모리 체크를 하는데요...
뭣땜에 그런건지.. 힌트라도 부탁드려요
뭘 놓지고 있는건지 ㅠㅠ

버전은 AIX 5.2이고 컴파일러는 xlC_r 입니다;
-------------------------------------------------------------------

답변 :
퍼온 글입니다. 참고하시길..

AIX 에서 malloc, free 사용시 프로세스의 메모리 사용을 모니터링하면 free 시 메모리가
커널에 원하는 만큼 반환되지 않는 것을 알 수 있습니다. 이는 커널에서 메모리 사용효율을
극대화 하기 위해 AIX 가 사용하는 내부 아키텍쳐에 기반한 지극히 정상적인 현상입니다.

따라서 메모리 할당/해제 관련 malloc, free 사용시 메모리의 효율적 사용을 고려한 AIX 의
기본처리 방식을 무시하고 함수이름 그대로 메모리를 할당/해제 하고자 한다면 해당
프로그램에서 메모리 free 시 disclaim 함수를 free 에 앞서 추가로 호출하거나 AIX 5.2 의
경우 프로그램 시작 전에 다음의 환경변수를 set 하면 됩니다.

MALLOCDISCLAIM=true

------------------------ AIX 에서의 메모리관리 기본방식 ----------------------------

When you free memory it does not go back to the system in case you need to use the
same amount of memory again.

we will use disclaim() instead of free which really returns the memory or associated
paging space to the system.

It is not sufficient to use the free() subroutine to free the space that was allocated with
the malloc() or calloc() subroutines. The free() subroutine releases only the address
range that the structure occupied. To release the real memory and paging space, use
the disclaim() subroutine to disclaim the space as well.The call to disclaim() should
be before the call to free().

-------------------------------------------------------------------

결론 :

ps aux 를 사용해서 메모리 사용량을 체크했을때 RSS 를 보면 늘어나기만 했지 줄어들지는 않는다.
이게 왜 이럴까 이러다가 난리 나는거 아닌가 싶었는데... 알아보니
위의 이유 때문이었다!! 결론적으로 프로그램이 처음에 구동 되었을때 RSS가 급격하게 증가하더라도 결국에는 어느 한 지점에
멈춰야 하는다는 것이다. 즉 메모리 사용량 최고치를 써놓으면 그게 더이상 늘지 않아야 한다는것.
즉 RSS는 윈도우 작업관리자의 최고 메모리 사용량과 일맥상통하는 개념같다...

반응형

'OS > AIX::' 카테고리의 다른 글

AIX 컴파일 정보 2  (0) 2012.12.05
AIX Thread Dump 분석 방법  (0) 2012.08.22
AIX 라이브러리 버전 확인  (0) 2012.07.12
AIX 컴파일 정보  (0) 2011.10.05
nmon 을 사용하여 서버 모니터링 하는 방법  (0) 2011.08.20
반응형

출처 : http://blog.naver.com/dalbong97?Redirect=Log&logNo=130109136330

nmon 을 사용하여 서버 모니터링 하는 방법

1. 서버 접속 후 프롬프트 상에서 “nmon” 명령어 타이핑 후 엔터


2. CPU 별 사용률 조회를 위해서는
1
번 화면 상태에서 키보드 “c” 키(CPU의 C) 입력 (엔터키 입력 필요 없음)

3. CPU 점유율 높은 프로세스 별로 조회를 위해서는
1
번 또는 2번 화면 상태에서 키보드 “t”키(Top process 의 T) 입력 (엔터키 입력 필요 없음)

4. nmon 프로그램 종료를 키보드 “q” 입력 또는 “컨트롤+C” 입력

반응형

'OS > AIX::' 카테고리의 다른 글

AIX 컴파일 정보 2  (0) 2012.12.05
AIX Thread Dump 분석 방법  (0) 2012.08.22
AIX 라이브러리 버전 확인  (0) 2012.07.12
AIX 컴파일 정보  (0) 2011.10.05
AIX malloc - free 시 혹은 new - delete 시의 메모리 반환  (0) 2011.08.21

+ Recent posts