[freebsd 서버] 이것밖에 못 버틸까요?

james의 이미지

< o/s >
freebsd 4.9

< 내용 >
서버의 stress test를 하고 있습니다.
클라이언트/서버 모두 각각 다른 freebsd machine에서 실행됩니다.

(1) 클라이언트가 서버에 연결을 시도하면, 서버는 fork
(2) 최초1개의 클라이언트는 나머지 추가적으로 연결되는 클라이언트들에게 0.5초 간격으로 broadcast를 실시 (서버는 ipc로서 fifo)

(3) 새로 연결하는 클라이언트들은 나머지 연결되있던 클라이언트에게 1번씩 broadcast실시 (서버는 ipc로서 fifo)

(4) 1100개를 넘어가면, idle 0%, system 100%가 되며 서버가 먹통

(5) kern.ipc.* 와 net.* 등의 값들은 체크하여 튜닝함

< 문제 >
(1) 여러번 실시 해봤지만, 1100개가 한계점이더군요. 왜 1100개에서 먹통이 되버리는 걸까요? (기타버퍼값등 무엇인가에 걸려서 버티다가 한계에 다다르는건지 추가적으로 셑팅해줘야 하는 값이 있는건지 통 감이 안 잡힙니다.)

(2) 위의 stress가 서버가 못 버틸만큼 큰 부하일까요

(3) 어떻게 버티게 할것인지

여러분들의 많은 의견 부탁드립니다.

모두 좋은 하루 되시고요. :shock:

서지훈의 이미지

wmstat 로 찍은 값이나 top으로 찍은 값들이랑...
하드웨어 스펙들이 있으면 답변에 많은 도움이 될 것 같네요...
wmstat는 1초 간격으로 파일로 저장을 하셔서 분석을 하면은 어느 정도는 답이 나올듯도 한데...
그리고 테스트 소스들도 같이 올라와야 좀 더 자세한 답변들이 나가겠군요.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

bugiii의 이미지

머신의 메모리와 kern.ipc.* 등의 설정값 커널 설정 등을 알려주시면 서지훈님이 잘 설명해주시리라 믿습니다...

james의 이미지

h/w spec과 top로그, kern.ipc셑팅값 먼저 올립니다. wmstat등도 준비되는데로 올리겠습니다.

감사합니다.

1. h/w spec (서버)

cpu : 2.4 xeon
memory : 2Giga

2. kern.ipc설정

kern.ipc.maxsockbuf: 262144
kern.ipc.somaxconn: 1024
kern.ipc.nmbclusters: 65535
kern.ipc.maxsockets: 65535

3. top로그

< 800 개시도 >
last pid: 1316; load averages: 0.38, 0.43, 0.26 up 0+00:55:07 16:44:51
835 processes: 1 running, 834 sleeping
CPU states: 2.7% user, 0.0% nice, 3.9% system, 1.6% interrupt, 91.9% idle
Mem: 413M Active, 12M Inact, 158M Wired, 8K Cache, 28M Buf, 1427M Free
Swap: 3072M Total, 3072M Free

PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
496 server 2 0 44208K 4528K select 0:14 1.27% 1.27% server.bin
475 server 28 0 2876K 2160K RUN 0:03 0.00% 0.00% top
911 server 2 0 44264K 7732K select 0:01 0.00% 0.00% server.bin

< 1200 개시도 > - 멈춤
last pid: 1690; load averages: 13.76, 4.32, 1.86 up 0+01:05:37 16:55:21
1201 processes:39 running, 1162 sleeping
CPU states: 1.1% user, 0.0% nice, 95.4% system, 0.8% interrupt, 2.6% idle
Mem: 621M Active, 11M Inact, 179M Wired, 8K Cache, 28M Buf, 1198M Free
Swap: 3072M Total, 3072M Free

PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
1668 server 29 0 44392K 20332K RUN 0:00 0.41% 0.34% server.bin
1669 server 29 0 44392K 20332K RUN 0:00 0.42% 0.34% server.bin
1664 server 28 0 44384K 15568K RUN 0:00 0.17% 0.15% server.bin
1666 server 28 0 44384K 12328K RUN 0:00 0.06% 0.05% server.bin
1667 server 28 0 44392K 20308K RUN 0:00 0.06% 0.05% server.bin
1686 server 28 0 43936K 2856K RUN 0:00 0.35% 0.05% server.bin

cjh의 이미지

일단 somaxconn 값을 더 늘려 보시고(1024에서 그 이상으로...), 800개일때 로드와 1200개일때 로드가 많이 차이가 나는데 어떤 지점에서 순간적으로 그렇게 바뀌게 되는지를 측정해 보시는 것이 좋겠습니다.

- 시스템 상태를 보는 것은 systat -vmstat 1 등의 명령어가 도움이 될 겁니다.
- top에서는 서버 프로세스가 RUN이외 어떤 상태에서 대기중인지 그 상태를 보는 것도 중요합니다.
- tail -f /var/log/messages 해서 커널이 어떤 에러를 내는지도 보셔야 겠습니다.
- 참 netstat -m 해서 mbuf가 얼마나 차는지도 꼭 보세요.
- 메모리는 충분해 보이는군요. 스왑도 안쓰고...

--
익스펙토 페트로눔

서지훈의 이미지

지금 시스템 상태로는 vmstat 출력을 안봐도 될것 같네요...
resource는 넉넉한거 같고...
kern.ipc.somaxconn 이 값을 cjh 님의 말씀대로 늘려 보시는건 어떨지요?
이 값이 아시겠지만...
시스템이 어느 순간 받아들일 수 있는 새 연결의 최대개수라고 하네요...

그래도 문제가 생길경우...
$ man tuning

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

익명 사용자의 이미지

로그나 상황설명으로 보아서 1,000 넘어서는 시점에 문제가 있는 것 같은데 아마도 openfiles limit에 걸린 것 같으네요..
ulimit 설정 구글링 해보시고 soft 및 hard 제한치를 상향 설정해 주세요. soft는 프로세스 한개가 열 수 있는 최대, hard 는 유저가 열 수 있는 최대값입니다... 보통은 soft x 2 = hard 이지만 상황에 맞게 하시면 되는데 hard >= soft 규칙은 꼭 지키셔야 할 겁니다.
그리고 시스템 전체가 열 수 있는 한계값은 /proc 어딘가에 file-max 라는 파일 있을 겁니다. 그걸 조정해 주시면 됩니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.