대용량 파일 쓰기에서의 이상현상..

thisnome의 이미지

프로젝트 성능시험 도중 대략 5초정도의 주기로 프로젝트 내의 여러 프로세스들이 일을 안하는 현상이 발생하더군요..
그래서 이리저리 원인을 분석하다보니.. 5초마다 I/O 가 많이 발생하고, 그때마다 파일로 로그를 남겨야 하는 모든 프로세스들은 길게는 1초 가끼이 CPU 점유를 하지 않고 놀고 있는 것 같았습니다.
5초마다 1초정도씩 I/O 가 발생하고, 그로인해 5초마다 1초정도씩 프로세스들이 쉰다. 지금까지의 결론입니다.

문제는 프로젝트 내의 프로세스들중에 일부로 5초마다 로그를 과하게 남기는 놈이 없다는 겁니다. 다들 꾸준하게 로그를 파일에 쓰긴 하지만요..

아래는 vmstate 가 1초마다 남긴 로그입니다.
5초마다 io 항목의 bo 가 크게 늘어난 것을 확인하실 수 있습니다.

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  5      0 7710700 465620 931376    0    0     0 66336 4456 44990  3  4 78 15  0
 3  0      0 7697308 465684 945340    0    0     0   468 6014 80834  4  7 77 12  0
 2  0      0 7679172 465716 962652    0    0     0   264 7437 89468  6  8 86  0  0
 1  0      0 7665476 465748 976152    0    0     0     0 6211 64391  5  6 89  0  0
 6  0      0 7650472 465800 989760    0    0     0    36 6136 57207  5  7 89  0  0
 0  5      0 7640948 465824 997900    0    0     0 65384 4695 38140  3  4 77 16  0
 2  0      0 7624388 465860 1014884    0    0     0   412 7214 73438  5  8 77 10  0
 5  0      0 7610336 465896 1029232    0    0     0     8 6983 59958  5  7 87  0  0
 5  0      0 7596292 465936 1042672    0    0     0    48 6635 53486  5  6 89  0  0
 3  0      0 7582060 465976 1057240    0    0     0    52 6683 53854  5  6 88  0  0
 0  5      0 7571896 465988 1064520    0    0     0 67620 4810 35304  2  4 83 10  0
 6  0      0 7566548 466008 1071048    0    0     0   448 3748 24637  2  3 90  5  0
 4  0      0 7541660 466068 1095676    0    0     0   148 10134 108615  7 13 80  0  0
 2  0      0 7525660 466108 1110168    0    0     0   196 6651 53858  5  7 87  1  0
 1  0      0 7511664 466148 1123440    0    0     0   156 6728 52882  5  7 88  0  0
 0  6      0 7502824 466168 1131404    0    0     0 66552 4655 35652  2  4 81 12  0
 4  0      0 7488224 466204 1147188    0    0     0   408 5999 67976  5  7 78 10  0
 0  0      0 7471096 466252 1164204    0    0     0    56 7897 77180  6  8 86  0  0
 2  0      0 7458192 466288 1176468    0    0     0    40 6543 58935  5  6 89  0  0
 1  0      0 7443500 466324 1190708    0    0     0    36 6741 61302  5  6 89  0  0
 0  4      0 7433064 466348 1199040    0    0     0 66416 4759 41385  3  4 82 12  0

제 생각으로는 매초마다의 bo 수치가 일정하게 크게 나와야 할듯 한데 (매초마다 15000 정도씩 분할되게 나오면 될텐데..), 왜 5초정도마다 한번씩 몰리는지 모르겠습니다. 그때문에 성능도 제대로 안나오구요..
리눅스에서의 파일 처리가 원래 이렇게 5초마다 몰아서 처리하는건지, 아니면 다른 문제가 있는지 궁금합니다.
부디 답변 부탁드립니다.
혹시.. 프로세스 별로 저런 vmstat 같은 정보를 출력할 수 있는 명령이 있나요? ^^;

참고로 uname -a 의 결과는 아래와 같습니다.

uname -a
Linux devlinux 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x86_64 x86_64 GNU/Linux

keizie의 이미지

iostat, iotop 써보셨나요?

pastime의 이미지

커널은 성능을 위해 disk write 요청을 즉시 처리하지 않습니다.
대신 dirty page가 일정 비율 이상 많아지거나 (/proc/sys/vm/dirty_ratio)
일정 시간 마다 주기적으로 dirty page를 검사하여 flush 시키는데
이 시간이 기본적으로 5초로 지정되어 있습니다.

만약 1초 마다 flush 시키고 싶다면 다음과 같이 값을 변경하면 될 것입니다.
(물론 root 권한이 필요합니다!)

echo 100 > /proc/sys/vm/dirty_writeback_centisecs

thisnome의 이미지

답변 감사합니다.
바꿔가면서 성능에 어떤 영향을 주는지 계속 해봐야겠네요..

sql2의 이미지

writeback, noatime, deadline,CFQ, BBU, O_DIRECT, fopen, aio, jfs2 ...

구글님님에게 물어보세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.