linux 성능 최적화
시스템 병목 현상 분석
시스템 응답이 느려지면 먼저 대체적인 문제가 어디에서 발생하는지, IO 병목, CPU 병목, 메모리 병목인지 프로그램이 초래한 시스템 문제인지 포지셔닝해야 한다.
top 도구를 사용하면 우리가 주목하는 점을 비교적 전면적으로 볼 수 있다.
$top
top - 09:14:56 up 264 days, 20:56, 1 user, load average: 0.02, 0.04, 0.00
Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.2%st
Mem: 377672k total, 322332k used, 55340k free, 32592k buffers
Swap: 397308k total, 67192k used, 330116k free, 71900k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 2856 656 388 S 0.0 0.2 0:49.40 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 7:15.20 ksoftirqd/0
4 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/
대화식 모드로 전환한 후:
4
4
top 세 번째 행에는 현재 시스템의 값이 두 가지 중요합니다.
4
4
메모리 병목 현상 분석
메모리에 병목이 있는지 확인하려면 top 명령을 사용하는 것이 번거롭고free 명령은 더욱 직관적이다.
[/home/weber#]free
total used free shared buffers cached
Mem: 501820 452028 49792 37064 5056 136732
-/+ buffers/cache: 310240 191580
Swap: 0 0 0
[/home/weber#]top
top - 17:52:17 up 42 days, 7:10, 1 user, load average: 0.02, 0.02, 0.05
Tasks: 80 total, 1 running, 79 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 501820 total, 452548 used, 49272 free, 5144 buffers
KiB Swap: 0 total, 0 used, 0 free. 136988 cached Mem
top 도구는free 도구의 첫 줄에 있는 모든 정보를 표시하지만 실제 사용할 수 있는 메모리는 스스로 계산해야 알 수 있습니다.시스템에서 실제 사용할 수 있는 메모리는free 도구로 두 번째 줄의free+buffer+cached를 출력합니다.즉 세 번째 줄의free값 191580;free 명령의 각 값에 대한 상세한 해석은 이 글에서 사용할 수 있는 메모리를 참고하십시오.
메모리가 부족하면 시스템 응답이 느려지는 것이 뚜렷하다. 왜냐하면 이것은 시스템이 끊임없이 바꾸는 작업을 하기 때문이다.
더 나아가 메모리 사용 상황을 감시하고 vmstat 도구를 사용하여 운영체제의 메모리와 가상 메모리의 동적 변화를 실시간으로 동적 감시할 수 있다.참고: vmstat에서 메모리 사용 상황 감시하기;
입출력 병목 현상 분석
IO에 성능 병목이 존재하면 top 도구의%wa가 높습니다.
Iostat 도구를 사용한 추가 분석:
/root$iostat -d -x -k 1 1
Linux 2.6.32-279.el6.x86_64 (colin) 07/16/2014 _x86_64_ (4 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.02 7.25 0.04 1.90 0.74 35.47 37.15 0.04 19.13 5.58 1.09
dm-0 0.00 0.00 0.04 3.05 0.28 12.18 8.07 0.65 209.01 1.11 0.34
dm-1 0.00 0.00 0.02 5.82 0.46 23.26 8.13 0.43 74.33 1.30 0.76
dm-2 0.00 0.00 0.00 0.01 0.00 0.02 8.00 0.00 5.41 3.28 0.00
4
4
4
4
4
더 많은 파라미터 설명은 iostat을 참고하여 입출력 서브시스템을 감시하십시오.
분석 프로세스 호출
top 등 도구를 통해 시스템 성능 문제가 특정한 프로세스에서 발생한 것을 발견한 후에 우리는 이 프로세스를 분석해야 한다.질문이 어디에 있는지 계속 조회하기;
여기에 우리는 두 가지 유용한 도구가 있다: pstack과 pstrace
pstack은 프로세스 창고를 추적하는데 이 명령은 프로세스 문제를 조사할 때 매우 유용하다. 예를 들어 우리는 서비스가work상태(예를 들어 가사상태, 사순환상태)에 있는 것을 발견하고 이 명령을 사용하면 문제를 쉽게 포착할 수 있다.일정 시간 내에 pstack을 몇 번 더 실행할 수 있다. 만약에 코드 창고가 항상 같은 위치에 멈추는 것을 발견하면 그 위치는 중점적으로 주목해야 한다. 문제가 생긴 곳일 가능성이 높다.
예: bash 프로그램 프로세스 스택을 보려면 다음과 같이 하십시오.
/opt/app/tdev1$ps -fe| grep bash
tdev1 7013 7012 0 19:42 pts/1 00:00:00 -bash
tdev1 11402 11401 0 20:31 pts/2 00:00:00 -bash
tdev1 11474 11402 0 20:32 pts/2 00:00:00 grep bash
/opt/app/tdev1$pstack 7013
#0 0x00000039958c5620 in __read_nocancel () from /lib64/libc.so.6
#1 0x000000000047dafe in rl_getc ()
#2 0x000000000047def6 in rl_read_key ()
#3 0x000000000046d0f5 in readline_internal_char ()
#4 0x000000000046d4e5 in readline ()
#5 0x00000000004213cf in ?? ()
#6 0x000000000041d685 in ?? ()
#7 0x000000000041e89e in ?? ()
#8 0x00000000004218dc in yyparse ()
#9 0x000000000041b507 in parse_command ()
#10 0x000000000041b5c6 in read_command ()
#11 0x000000000041b74e in reader_loop ()
#12 0x000000000041b2aa in main ()
strace는 프로세스의 시스템 호출을 추적하는 데 사용된다.이 도구는 프로세스가 실행될 때의 시스템 호출과 수신 신호를 동적으로 추적할 수 있습니다.매우 효과적인 검사, 지도, 디버깅 도구이다.시스템 관리자는 이 명령을 통해 프로그램 문제를 쉽게 해결할 수 있다.
참고:strace 추적 프로세스의 시스템 호출;
최적화 프로그램 코드
자체 개발한 프로그램을 최적화하려면 다음 지침을 따르는 것이 좋습니다.
4
4
gprof 사용 절차
4
4
4
gprof의 사용 사례에 관하여 [f1]를 참고하십시오.
기타 도구
메모리 유출을 디버깅하는 도구valgrind, 관심 있는 분들은 구글에서 알 수 있습니다.
Oprofile: Linux 플랫폼의 강력한 성능 분석 도구로 참조[f2];
위에서 소개한 도구를 제외하고 비교적 전면적인 성능 분석 도구도 있다. 예를 들어sar(Linux시스템에서 기본적으로 설치하지 않기 때문에 수동으로 설치해야 한다).sar의 상주 모니터링 도구를 열면 비교적 전면적인 성능 분석 데이터를 수집할 수 있다.
sar의 사용에 관하여sar를 참고하여 시스템의 병목을 찾아내는 유리한 도구를 찾아낸다.
[f1]
C++의 성능 최적화 실천http://www.cnblogs.com/me115/archive/2013/06/05/3117967.html
[f2]
Oprofile로 성능 파악http://www.ibm.com/developerworks/cn/linux/l-oprof/
[f3]
Linux의 free 명령 설명http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.