rzsz , rsync와 같은 툴로 파일을 리눅스 서버간 또는 리눅스-로컬 (window,mac)으로 다운받을 수 있다.

webdav 서버를 이용해서 파일 교환하면 좋다.

 

* webdav 웹 서버 설치

apache httpd or nginx

 

* webdav 웹 서버에 파일 업로드하기

$ curl -T time.xlsx http://dav.google.com/public/

 

* webdav 웹 서버에 파일 다운로드 받기

$ wget http://dav.google.com/public/time.xlsx

Posted by '김용환'
,

하나의 파일 안에 똑같은 내용의 string(또는 토큰)이 얼마나 있는지 빈도수를 알고 싶을 때 다음과 같이 awk를 이용하면 편하다.

 

$ cat output1.txt
US
TH
x
x
x
TH
x
x
TH
x
x
x

 

 

$ awk '{ arr[$0]++ }END{for ( i in arr ) { print i, arr[i] } }' output1.txt
TH 3
x 8
US 1
Posted by '김용환'
,

cut 명령어

c or linux 2012. 10. 25. 15:50

 

리눅스 쉘에서 파싱하는데 많이 자주 사용하는 리눅스 명령어이다.

특히 환경 변수 나 .bashrc와 같은 파일에서 찾을 때 유용하다.

 

-d 는 delimeter token

-f 는 field를 의미한다.

 

예1) property 파일의 key, value 찾기

$ cat 25.txt

aaaa=bbbb

$ cat 25.txt  | cut -d '=' -f 1
aaaa

$ cat 25.txt  | cut -d '=' -f 2
bbbb

 

예2)

$ env | grep JAVA_HOME | cut -d '=' -f2
/usr/j2se

Posted by '김용환'
,

 

로그 삭제를 위해서 find 후 exec로 하는 rm 명령어를 이용하거나 백업을 위해서 cp/rscyn 명령어는 상당히 부하를 일으킨다.

따라서, 기존에는 cpu를 낮추는 리눅스 tool 을 이용하곤 했었다.

 

 

회사의 똑똑한 분을 통해서 알게 된 아주 좋을 툴..  그 이름 trucate

(64비트 운영체제 하에서 로그를 엄청나게 쌓고 삭제하는 경우에 아주 유용함)

 

truncate man 페이지

http://man.cx/truncate

http://www.kernel.org/doc/man-pages/online/pages/man2/ftruncate.2.html

 

옵션 s를 이용하면 싸이즈만큼 삭제가능하다. 따라서 cpu를 많이 사용하지 않게 해 준다.

−s, −−size=SIZE

use this SIZE

 

자세한 내용은 아래 내용을 참조

http://www.depesz.com/2010/04/04/how-to-remove-backups/

 

 

#!/bin/bash
# yes I watch Phineas and Ferb on disney, dont ask.
trunc="/truncatenator/truncate"
file=$1
size=`ls -l $file |awk '{print $5}'`
while [ $size -gt 1000000000 ]; do
size=`echo $size-100000000|bc`;
$trunc -c -s -100000000 $file ;
sleep 0.25;
done
rm -f $file
#end

Posted by '김용환'
,

'c or linux' 카테고리의 다른 글

cut 명령어  (0) 2012.10.25
대용량 파일 삭제/백업- truncate  (0) 2012.10.22
리눅스 메모리 관련 파라미터  (0) 2012.04.02
iproute2 (tc)  (0) 2012.03.12
struct 초기화 - memset  (0) 2012.03.12
Posted by '김용환'
,

 

 

swappiness 파라미터의 값이 0이면, 필요한 경우에만 스왑을 쓴다는 것이고, 100이면, 메모리 LRU 방식으로 preemtively 하게 조절을 한다.

그러나 메모리 상태를 보면 cached 때문에 free 메모리로 모잘러서 영향을 다른 어플이 받을 수 있다. drop_cache 파라미터를 수정하는 것도 좋을 듯하다.

 

 

 

<vm.swappiness, vm_drop_caches, vm_pagecache>

http://blog.naver.com/PostView.nhn?blogId=websarang_&logNo=100118236876

 

<swap tendency>

swap_tendency = mapped_ratio/2 + distress + vm_swappiness;

  • The "distress" value is a measure of how much trouble the kernel is having freeing memory. The first time the kernel decides it needs to start reclaiming pages, distress will be zero; if more attempts are required, that value goes up, approaching a high value of 100.
  • mapped_ratio is an approximate percentage of how much of the system's total memory is mapped (i.e. is part of a process's address space) within a given memory zone.
  • vm_swappiness is the swappiness parameter, which is set to 60 by default.

http://lwn.net/Articles/83588/

 

<Swap 이론적 배경>

swap이 발생하는 시점은 OS단에서 메모리로 읽어 들이는 부분에서 page fault가 나야 한다. 그 원인은 3가지다. IO가 많은 것도 영향을 줄 수 있다.

|   a-) User page
|   b-) Read or write access  
|   c-) Page not present

page fault 에러가 나면, do_page_fault() –> wakeup_kswapd() 함수를 호출하고, 인터럽트를 발생하고, 데몬을 깨운다.

 

관련 링크

http://dojeun.egloos.com/317480

http://blog.naver.com/PostView.nhn?blogId=teastful&logNo=140120981123

http://www.tldp.org/HOWTO/KernelAnalysis-HOWTO-7.html

 

<swap이 발생되는 경우>

리눅스 커널은 임계값(threadhold)보다 여유 메모리가 부족하면 메모리에서 사용하되지 않는 페이지를 찾아스 디스크로 스왑해서 여유공간을 확보하려고 한다. 해당 프로세스의 스왑뿐 아니라 다른 프로세스까지 체크해서 안쓰는 페이지를 스왑으로 바꾼다. (LRU 방식)

이러다 보니 다른 프로세스가 cpu를 선점하여 스왑된 페이지를 읽고 쓰고(swap out/in) 하면서 하는 작업이 있을 수 있다.

참조 : 한빛미디어 리눅스 커널 프로그래밍

 

 

<내 생각>

jvm이 swap 영역에 빠졌다면, 메모리 증설이 필요하다. 이 때 주의할 사항은 jvm이 IO 작업이 많은 것인지 확인할 필요가 있다. (또는 그 서버에 실행중인 다른 jvm의 영향인지 살펴봐야 한다. ) 너무 느려져서 영향을 줄 수 있다면, 메모리를 가장 먼저 증설(내가 생각하는 가장 좋은 방법)하고, 리눅스의 drop_cache, swappiness 커널 파라미터를 수정해서 서버의 성능을 최대한 높여보는 것도 좋을 듯.

Posted by '김용환'
,

iproute2 (tc)

c or linux 2012. 3. 12. 22:55

http://www.tldp.org/HOWTO/Traffic-Control-HOWTO/software.html#s-iproute2

iproute2 is a suite of command line utilities which manipulate kernel structures for IP networking configuration on a machine.

네트워크 bandwidth를 control할 수 있는 utility
Posted by '김용환'
,

통신, 파일과 관련해서 read 할때, 쓰레기값도 같이 읽을 수 있기 때문에 memset은 기본적으로 하는 것이 좋다. 나중에 문제가 커지지 않는 안티 버그 습관이랄까..

open jdk의 소스 패치를 보면서, 얘네들도 실수해서 코딩하기도 하는구나.. 하는 것을 알게 된다.


http://cr.openjdk.java.net/~zhangshj/7152948/webrev.00/ 
  {
      jint fd = fdval(env, fdo);
      ssize_t result = 0;
      struct iovec *iov = (struct iovec *)jlong_to_ptr(address);
      struct msghdr m;
+     // initialize the message
+     memset(&m, 0, sizeof(m));
      if (len > 16) {
          len = 16;
      }
  
      m.msg_iov = iov;
      m.msg_iovlen = len;
  
      result = recvmsg(fd, &m, 0);
      if (result < 0 && errno == ECONNREFUSED) {
          JNU_ThrowByName(env, JNU_JAVANETPKG "PortUnreachableException", 0);
          return -2;


 

'c or linux' 카테고리의 다른 글

리눅스 메모리 관련 파라미터  (0) 2012.04.02
iproute2 (tc)  (0) 2012.03.12
라인 피드 문제  (0) 2012.03.08
리눅스 및 MMU 가상메모리 공부  (1) 2012.02.22
리눅스에서 디스크 용량 체크  (0) 2012.02.07
Posted by '김용환'
,

라인 피드 문제

c or linux 2012. 3. 8. 19:09

.bashrc가 문제가 없는데, 계속 .bashrc를 못읽는다면. 파일 포맷을 의심한다.

-bash-3.00$ source .bashrc_backup
-bash: .bashrc_backup: line 7: syntax error: unexpected end of file


윈도우에서 커밋한 라인피드가 문제이다.
 
-bash-3.00$ file /home/www/work/.bashrc
/home/www/work/.bashrc: ASCII text, with CRLF line terminators



-bash-3.00$ perl -pi -e "s/\r//g" .bashrc
-bash-3.00$ file .bashrc
.bashrc: ASCII text
-bash-3.00$ source .bashrc


file /home/www/work/.bashrc
/home/www/work/.bashrc: ASCII text

잘 동작한다.

'c or linux' 카테고리의 다른 글

iproute2 (tc)  (0) 2012.03.12
struct 초기화 - memset  (0) 2012.03.12
리눅스 및 MMU 가상메모리 공부  (1) 2012.02.22
리눅스에서 디스크 용량 체크  (0) 2012.02.07
awk를 이해하는 데 도움이 되는 글들  (0) 2012.02.03
Posted by '김용환'
,

 

* 리눅스 시스템 & 커널 기초- 한빛 미디어

리눅스 커널쪽으로 쉽게 접근할 수 있는 책 (깊게 안들어가서 초보자가 보기에 딱 좋은 책) 2.4 기준임

6장 메모리 관리

 
* 대학교 자료
http://mie.pcu.ac.kr/Lectures%20Data/LinuxEmbeddedSystem/10/Ch06_%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EA%B4%80%EB%A6%AC%20%5B%ED%98%B8%ED%99%98%20%EB%AA%A8%EB%93%9C%5D.pdf

리눅스 시스템 및 커널 기초를 자료로 만든 자료임

 

* proc 파일 시스템과 물리 주소/가상주소/MMU 이야기를 쉽게 정리한 문서

http://www.kandroid.org/board/data/board/linux/file_in_body/1/device_driver-14.pdf

 

* 페이지 테이블에 주소 변환 정보가 채워지는 원리

http://www.iamroot.org/xe/index.php?mid=Kernel_8_ARM_H&document_srl=54103

 
* 누군가 공부하다만 자료
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=18&ved=0CFQQFjAHOAo&url=http%3A%2F%2Fulkml.googlecode.com%2Ffiles%2F%25EB%25A9%2594%25EB%25AA%25A8%25EB%25A6%25AC_%25EB%25B0%259C%25ED%2591%259C%25EC%259E%2590%25EB%25A3%258C3.pptx&ei=_lxET_a3A-mAmQXdtIyiBA&usg=AFQjCNElA1sVVUkItGAOEp0BjCOEUbqJcw



* 리눅스 커널 프로그래밍- 한빛미디어

8장 메모리 관리




* 잘 정리한 웹 자료

http://dojeun.egloos.com/317480

Posted by '김용환'
,