서버 프로그램을 작성하다 보면, 학습,색인 등의 특정 프로세스 이후 대용량의 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


GCC

  • Fix LD_LIBRARY_PATH at compile time”-rpath <path>”    or “-Wl,-rpath,<path>”

     

General Tips

  • Check the dependency of dynamic library ( .so file )


Sample XML

Java Code

 

개인적으로 자주 쓰거나 참조하는 Python Code 를 정리해 보았다.

File

read lines with line separator

 

read lines without line separator

File path concatenation

Get Filename list

Create directory if it doesn’t exist

 

 

String operations

format

 Fast string concatenation

 

정된 문자들로 조합된 무작위 문자열을 만드는 예제 코드이다. (import 부분은 생략되었음)

아래의 예제는 50000 유저에 대해 랜덤한 케릭터로 구성된 아이디를 발급하는 부분이다. 길이는 5 ~ 20자 내에서 랜덤하게 생성된다.