서버 프로그램을 작성하다 보면, 학습,색인 등의 특정 프로세스 이후 대용량의 knowledge 를 로딩하는 경우가 있다.


분명히 메모리 할당 해지 부분을 잘 넣었음에도 증가하는 메모리가 있는 경우가 있는데, 이때 환경변수로 MALLOC_ARENA_MAX=1 를 사용하게 되면 메모리 증가를 막을 수 있다.


단 메모리 할당 속도가 현저히 저하되므로 용도에 맞게 잘 사용해야 한다.


보다 자세한 내용은 아래를 참고한다.


  • https://devcenter.heroku.com/articles/tuning-glibc-memory-behavior


  1. DATABASE URL 에 아래의 인자를 추가하면 속도가 향상된다.
  2. Table 구조에서 성능저하를 일으킬 수 있는 불필요한 부분을 삭제한다. ( 절대 빈값이 들어갈수 없는 INSERT 문을 이용하는데 NOT NULL을 사용함, 검색을 자주하지 않는 필드에 대해서 인덱스를 사용함 등…)


테이블 폭 제약에 따라 긴 본문이 두줄에 걸쳐 출력되었는데 아래와 같은 현상이 발견되었다.

원문

발생현상

 해당 부분은 특정 컴퓨터의 특정 브라우저 ( Chrome 43.0 / IE 11 ) 에서 드물게 발생하였는데 아래와 같이 해결하였다


JSP

JSP 결과 페이지가 XML일때 브라우저 상에서 제목과 같은 메시지를 자주 보게 된다.

이는 XML 윗부분에 whitespace가 추가되었기 때문에 발생한다.

 

위와 같은 코드는 newline 이 발생되며, 아래와 같이 제거할 수 있다.

 

보다 근본적인 해결책은 실제 view 로 접근하는 jsp 파일의 최상단에 아래의 코드를 삽입하면 된다.

 

이렇게 하는 경우 해당 페이지에서 발생하는 모든 whitespace를 제거해준다.

C++

error LNK2019: __imp_WSAStartup

  • 원인 : ws2_32.lib 를 링크하지 않아서 발생하는 문제
  • 해결 : ws2_32.lib 를 추가

 

relocation 0 has invalid symbol index 11

  • 원인 : 빈 cpp 파일을 링킹할 때 발생하는 에러
  • 해결 : 빈 cpp 파일 제거


Little Endian & Big Endian

  • struct 의 경우 variable의 bit order 변경 뿐 아니라 variable의 순서도 바뀌게 된다. 따라서 아래와 같이 little endian에서 작성된 struct는 big endian machine 에서 역순으로 기술되어야 한다.

     

 

AIX

  • 속도적인 이슈로 인하여 char로 선언한 경우 default로 unsigned char로 동작한다.  xlc Compile Option 중 하나인  -qchar=signed 를 사용하여 gcc등의 다른 컴파일러와 같이 signed char로 동작하게 바꿀 수 있다.
  • 아래와 같은 에러가 발생한 경우 runtime 라이브러리 버전이 문제일 수 있다. xlC runtime 버전을 6.0.0.0 에서 8.0.0.0 으로 업데이트 진행하면 해결될 수 있다.

    관련링크 : IBM developerworks

HP UX

  • memory allocation 시 64bit의 경우 8byte, 32bit의 경우 4byte 단위로 alignment 를 잘 맞추어서 할당해야 한다. 구조체 생성시에도 padding 용 변수를 두어 alignment를 맞춘다. 아래 메시지는 memory alignment가 맞지 않은 경우 발생한 에러메시지의 일부를 발췌한 것이다.

     
  • memory allocation 부분에서 segfault 가 발생한 경우
    • gdb example
    • 원인 : 하나의 프로세스가 할당 가능한 데이터 세그먼트 합계를 지정하는 kernel parameter 값(maxdsiz, maxdsiz_64bit)이 작아 프로그램이 더이상 메모리를 할당하지 못하고 죽음
      • kernel parameter 확인 방법

         
      • 실제 물리 메모리 사이즈 확인 방법 (How to check Physical memory in HP-UX)

         
    • 해결 : root 권한을 이용해 해당 kernel parameter 값을 증가시킨 후 (32비트 : 2G , 64비트 : 64G로 설정하였음)  재부팅


자주 사용하는 Bash 명령어들을 정리해보았다.

Array

Associative Array

 

Loop

Dir

 

grep

grep with string replacement (xargs)

 

find

 

 

sed

 

for loop

  • bash

     
  • cmd

     

Argument (args)

  • bash

     
  • cmd


+ Recent posts