반응형

컴퓨터활용 238

xa_NULL trc 파일

티맥스가 DBMS 와 거래할 때의 로그가 보관되는 곳이 xa_NULL 파일이다. 엄밀히 말하면 오라클의 클라이언트 모듈이 남기는 파일이다. (티맥스나 턱시도 같은 미들웨어가 남기는 것이 아님) 모든 거래의 로그를 남기게 되므로 용량이 무지막지하게 크기도 하지만 장애가 났을 때는 중요한 근거 자료가 된다. xa_NULL 파일은 다음과 같이 생겼다. 102946.40932.0: xaocommit: xid=0x1-02c00000038a7126-0000001, rmid=0, flags=0x0 102946.40932.0: xaocommit: rtn 0 보통 파일명은 xa_NULL03252021.tr c 와 같이 중간에 일자가 들어간다. 이 파일구성은 거래시각, 처리 프로세스의 ID가 먼저 나오고 그 다음 라인에 ..

프로프레임 4.0 스튜디오 heap 메모리 부족 오류

프로프레임 4.0 스튜디오를 사용하다가 메모리 오버 플로우 가 나면서 heap 메모리가 부족하다는 오류가 발생될 경우가 있습니다. 종전에 알기로 eclipse.ini 에다가 옵션을 잡아 주면 되는 것으로 알았는데 실험해 본 바에 의하면 먹히지 않습니다. 대신 proframe.exe 를 실행하는 단축아이콘의 속성에 아래와 같이 Xms, Xmx 메모리를 지정하면 먹히네요. C:\TmaxSoft\ProFrameTP4.0\Studio\proframe.exe -clean -vmargs -Xms256m -Xmx512m 여기서 Xms 는 initaial heap memory size 이고 Xmx 는 Maximum heap memory size 입니다. 보통 1G 이상 메모리를 가지고 있는 노트북이라면 256으로 시작..

리눅스 디렉토리 사용량

디렉토리별 사용량을 보려면 du 명령을 사용한다. 그런데 그냥 du 명령을 치면 하위 디렉토리까지 다 보여 주게 되므로 정신이 없다. 현재 디렉토리 기준으로 1 레벨만 보고 싶다면 --max-depth 옵션을 사용한다. du --max-depth=1 그러면 내가 접근할 수 없는 디렉토리의 경우 "허가 거부" 메시지가 뜨게 된다. 이런 거 지저분해서 보기 싫다면 du --max-depth=1 2>/dev/null "허가 거부" 등과 같은 오류 메시지는 화면으로 출력되지 않도록 한다. 디렉토리 사용량 크기별로 정렬해서 보면 편할 것이다. du --max-depth=1 2>/dev/null | sort -n 다른 이야기 지만 사용량을 byte 단위가 아닌 K, G로 보고 싶다면 -h 옵션을 사용한다.

U2L프로젝트 문자열 이슈

유닉스로 개발된 C 소스를 리눅스에서 컴파일만 하고서 돌리면 잘 돌아갈까? 대부분 프로그램들은 잘 돌아가지만 몇몇 코드들은 손을 봐줘야 하는 것들이 있다. 그중에서 함수로 아규먼트를 넘길 때 문자열 이슈가 있다. 특히 readonly 문자열 값을 아규먼트로 넘길 때 끝처리에서 다르게 동작한다. 001: void function_test_str( char *str ) { 002: char tmp_str[100]; 003: size_t len; 004: 005: len = strlen(str); 006: strncpy( tmp_str, str, sizeof(tmp_str)); 007: tmp_str[len] = 0x00; /* 확실한 막음처리 */ 008: printf("len=[%u] str=[%s] tm..

U2L프로젝트 ltoa 이슈

IBM이나 HP 유닉스에서 사용했던 ltoa 함수를 리눅스에서는 지원하지 않는다. int형 변수의 값을 char 배열에 넣는 함수를 사용하고 싶다면 할 수 없이 sprintf() 함수를 사용하는 방법을 사용해야 한다. 하지만 ltoa() 는 바로 문자열 포인터를 return 받기 때문에 바로 사용하면 되었지만 sprintf() 를 사용할 경우 결과를 저장할 변수를 하나 선언해야하는 번거로움이 있다. sprintf(버퍼,"형식지정자", 값) 예를들어, long cnt = 400; char str[100]; sprintf(str, "%ld", cnt ); 라고 하면 버퍼에 문자열 400 이 들어간다. 프로그램내에서 빈번하게 사용된다면 매크로로 선언해 놓고 사용하는 것을 권장한다. #define LTOA( _..

U2L프로젝트 printf 이슈

포매팅으로 패딩하여 출력하거나 문자열을 구성할 때 동작의 차이가 있다. printf("[%06s]\n", "AB"); 라고 했을 때 유닉스에서는 0 이 좌패딩되었다. 그런데 리눅스에서는 스페이스가 좌패딩된다. printf() 는 출력하는 거라 로직에 영향을 미치지 않을 수 있다고 치더라도 포매팅을 사용하는 sprintf 도 동일한 현상이 발생된다. 이런 로직의 경우는 프로그램 속에 숨어 있어서 찾아내기 어렵기 때문에 꼼꼼한 테스트가 필수이다. printf 함수의 포매팅으로는 커버할 수 없기 때문에 별도의 함수를 만들어야 하기 때문에 상당히 번거롭게 된다.

U2L프로젝트 NULL 이슈

유닉스로 개발된 C 소스를 리눅스에서 컴파일만 하고서 돌리면 잘 돌아갈까? 대부분 프로그램들은 잘 돌아가지만 몇몇 코드들은 손을 봐줘야 하는 것들이 있다. 리눅스에서는 sprintf 를 사용할 때도 유닉스와 다르게 동작해서 오류가 발생되는 경우가 있다. 유닉스에서는 멀쩡히 잘 돌아가던 프로그램을 리눅스에서 돌리면 오류가 발생되는 경우로서 sprintf()가 있다. memset(b, 0x00, sizeof(b)); sprintf(a, "name:%s" , b ); printf("%s\n", a ); 이런 소스의 경우 b 값이 NULL일 경우 유닉스에서는 아무 것도 찍히지 않는다. name: 이라고만 찍한다. 그러나 리눅스에서는 "(null)" 이라는 문자가 찍히게 되면서 name:(null) 이라고 찍힌다..

U2L 프로젝트 fclose() 이슈

유닉스 프로그램을 리눅스로 변환할 때 발생되는 이슈들 1. 변수가 NULL 일 때 access 하면 코어덤프가 발생되다. 유닉스에서는 이렇게 민감하지 않아서 coredump 가 나지는 않았았으나 linux 에서는 변수가 NULL 일 때 참조를 하면 바로 coredump 가 발생된다. 예를 들어 유닉스에서는 fclose(fp); 후에 다시 fclose(fp); 를 호출해도 코어덤프 발생되지 않았으나 리눅스에서는 짤없이 죽는다. 그래서 wrapper 함수를 만들어야 한다. int fn_fclose(FILE *_fp) { if( _fp != NULL && _fp->_fileno >= 0 ) return fclose(_fp); return 0; } 여기서 file structure pointer 변수가 fclo..

쉘에서 date 사용

기본 일자 포맷으로 출력할 때는 그냥 단순히> date -I 2020-02-22 date 명령어에서 포맷을 주려면 date뒤에 +로 시작한다. 포맷이 붙어 있을 경우 ' 로 감싸지 않아도 되지만 스페이스가 들어가면 ' 로 감싸줘야 한다.> date +'%F %T' 2020-02-22 13:23:53 $로 date 명령을 실행하여 변수처리를 할 수 있다.> echo $(date +%F_%T) 2020-02-22_13:24:23 > CUR_DATE=$(date +%F_%T) > echo $CUR_DATE 2020-03-21_13:34:23 동일한 효과를 얻을 수 있는 ` 문자로 date 명령을 실행할 수 있다.> CUR_DATE=`date +%F_%T > echo $CUR_DATE 2020-03-21_13:..

티맥스 서버가 수행중 죽을 때

티맥스 서비스를 호출했는데 느닷없이 프로그램이 죽었다. 정확하게 말하면 IPPR 서비스를 수행 중 해당 서버가 죽고 재기동 된다. 어떤 신호도 없이 서버가 죽는 경우에 뭐 부터 점검해야 하는 것인가. ulimit -a core file size (blocks, -c ) 0 stack size (kbytes, -s) 8192 여기서 스택사이즈가 너무 작게 잡혀 있을 경우 내부 변수를 선언해 나가다가 한계를 넘어가면 메모리 오류가 나면서 프로그램이 죽게 된다. tmax 계정의 .bash_profile 에 다음과 같이 스택사이즈를 늘려 준 후 재접속하고 tmax를 재기동 하면 오류 없이 거래가 통과되었다. ulimit -c 99999999 ulimit -s 143360 Linux 3.10.0 x86_64 Re..

반응형