تست لود سرور مجازی لینوکس با استفاده از ApacheBench

مقدمه:

تست لود ایده خوبی قبل از گسترش است.خوب است که به سرعت ،سناریوی بهترین حالت را برای پروژه خود قبل از اجرای تست های جزئی تر تعیین کنید.
ابزار (ApacheBench(abمی تواند تست لود سرورها را توسط ارسال یک تعداد دلخواه از درخواست های همزمان انجام دهد.اگر چه ab برای تست نصب و راه اندازی آپاچی طراحی شده بود ولی می تواند برای تست هر سرور HTTP استفاده شود.
در این مقاله ما خواهیم دید که یک مفسر روبی با سرورهای متفاوت تحت لود چگونه عمل می کند.در مراحل آموزش از اوبونتو ۱۰٫۱۳ استفاده شده و نتایج از سرور۵۱۲MB گرفته شده است.

نصب

بسته پایگاه داده را رفرش کنید.

apt-get update

بسته apache2-utils برای دسترسی به ApacheBench نصب کنید.

 

apt-get install apache2-utils

 

کاربر با امتیاز محدود

سپس کاربری ایجاد کنید که که روبی را مدیریت خواهد کرد.ایده خوبی نیست که در ادامه برای اجرای دستورات از یوز با دسترسی روت استفاده کنید.

 

useradd -m -d /home/test -s /bin/bash -g sudo test

این دستور چه انجام می دهد :

 

useradd –یک کاربر جدید ایجاد می کند.

-mدایرکتوری home را ایجاد می کند.

-d /home/test دایرکتوری خانگی کاربر را بر روی  /home/test تنظیم می کند.

-s /bin/bash –  پوسته bashکاربر را به صورت پیش فرض می سازد.(اوبونتو به صورت پیش فرض از dash استفاده می کند)

-g sudoکاربر را به گروه sudo اضافه می کند.(برای اجرای دستورات با sudo)

Test- نام کاربر جدید است.

 

پسورد را برای کاربر جدید تنظیم کنید.

 

passwd test

به کاربر جدید سوئیچ کنید.

 

su test

RVM

مدیر نسخه روبی، کار کردن با انواع محیط های روبی را آسان کرده است.آن مراقب عملیات نصب نسخه های خاص روبی است و توسط اجرای اسکریپت bash از وب سایت آنها نصب می شود.

 

\curl -L https://get.rvm.io | bash -s stable

برای استفاده از دستور rvm شما ابتدا نیاز به اجرای اسکریپت rvm دارید.

source ~/.rvm/scripts/rvm

اگر می خواهید،می توانید آن را داخل .bashrc بگذارید بنابراین rvm هر زمان که شما به عنوان کاربر لاگین می شوید در دسترس خواهد بود.

 

echo "source ~/.rvm/scripts/rvm" >> ~./bashrc

شما می توانید توسط دستور زیر تایید کنید که اسکریپت rvm مورد استفاده قرار گرفته است. آن باید function باشد و hashed نباشد.

type rvm | head -1

rvm is a function

سپس نصب rvm2.0.0 پسورد کاربر را خواهد خواست به خاطر اینکه آن قبل از نصب روبی نیاز به نصب مجموعه وابسته دارد .از آنجائیکه rvm روبی را از مبدا می سازد، این مرحله قدری طول می کشد.

 

rvm install 2.0.0

به روبی جدید سوئیچ کنید.این ممکن است به صورت پیش فرض بعد از نصب اتفاق بیفتد اما چک کردن ضرری ندارد.

 

rvm use 2.0.0

تست کردن

حالا که روبی نصب شده است شما می توانید یک سایت ساده ایجاد کنید و ببینید چه مقدار درخواست را می تواند پاسخ بدهد.
Sinatra را نصب کنید .آن یک چارچوب میکرو/DSL برای ایجاد برنامه های کاربردی وب روبی است .پرچم –no-*باعث می شود که از مستندات عبور کند.

 

gem install sinatra --no-rdoc --no-ri

یک نمونه از برنامه کاربردی sinatraرا که صرفا “hello world” را در خروجی چاپ می کند ایجاد کنید.

 

cd ~
vim app.rb

# app.rb
require 'sinatra'

get '/' do
'hello world'
end

سرور را اجرا کنید.

 

ruby app.rb

هنگامی که سرور سرانجام بالا آمد شما می توانید تست سرور مجازی را انجام دهید.با استفاده از فرمان ab به صورت زیر:

 

ab -n <num_requests> -c <concurrency> <addr>:<port><path>

یک ترمینال دیگر باز کنید و دوباره به سرور ssh کنید.یک تست را با ApacheBenchاجرا کنید. من از هزار درخواست با همزمانی ۱۰۰ درخواست استفاده کردم. علامت “/” نهایی را برای مسیر فراموش نکنید.

ab -n 1000 -c 100 http://localhost:4567/

Server Software:        WEBrick/1.3.1
Server Hostname:        localhost
Server Port:            4567

Document Path:          /
Document Length:        11 bytes

Concurrency Level:      100
Time taken for tests:   3.410 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      288000 bytes
HTML transferred:       11000 bytes
Requests per second:    293.23 [#/sec] (mean)
Time per request:       341.034 [ms] (mean)
Time per request:       3.410 [ms] (mean, across all concurrent requests)
Transfer rate:          82.47 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   2.0      0      11
Processing:   185  332  90.3    311     578
Waiting:       28  280  83.2    267     574
Total:        193  333  89.7    311     578

Percentage of the requests served within a certain time (ms)
  ۵۰%    ۳۱۱
  ۶۶%    ۳۵۷
  ۷۵%    ۴۲۳
  ۸۰%    ۴۴۶
  ۹۰%    ۴۶۷
  ۹۵%    ۴۸۰
  ۹۸%    ۴۹۰
  ۹۹%    ۵۰۱
۱۰۰%    ۵۷۸ (longest request)

نتایج من همگرا به حدود ۳۰۰ درخواست در ثانیه بود. WEBrick برای سرعتش مشهور است. با ctrl+c فرستادن درخواست ها را در سرور قطع کنید.

 

نصب Thin

Thin یک وب سرور مشهور روبی است که از Mongrelبرای تجزیه واز EventMachine برای IO غیر قابل مسدود استفاده می کند.Thin را نصب کنید و سرور را دوباره اجرا کنید Sinatra.باید به صورت اتوماتیک Thin را لود کند و به شما اطلاع دهد(“..با بک آپ گیری از Thin”)

gem install thin
ruby app.rb

اکنون دوباره عملیات تست را اجرا کنید.حالاباید یک مقدار سریعتر شده باشد.

 

Server Software:        thin
Server Hostname:        localhost
Server Port:            4567

Document Path:          /
Document Length:        11 bytes

Concurrency Level:      100
Time taken for tests:   1.339 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      244000 bytes
HTML transferred:       11000 bytes
Requests per second:    747.00 [#/sec] (mean)
Time per request:       133.870 [ms] (mean)
Time per request:       1.339 [ms] (mean, across all concurrent requests)
Transfer rate:          178.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   1.8      0       8
Processing:    55  128  19.9    132     155
Waiting:       42  116  19.7    121     144
Total:         62  129  18.5    132     156

Percentage of the requests served within a certain time (ms)
  ۵۰%    ۱۳۲
  ۶۶%    ۱۳۵
  ۷۵%    ۱۳۷
  ۸۰%    ۱۳۹
  ۹۰%    ۱۴۴
  ۹۵%    ۱۴۹
  ۹۸%    ۱۵۲
  ۹۹%    ۱۵۵
۱۰۰%    ۱۵۶ (longest request)

سرانجام در این حالت به نظر می رسد که Thin به مقدار قابل توجهی سرورسریع تری ازWEBrick می باشد که بیش از ۷۰۰ دستور در ثانیه است.(شما می توانید سعی کنید که تعداد درخواست ها را بالا ببرید اما برای من زیاد بالا نرفت)
نکته: من قادر بودم که ۱۰۰۰ درخواست در ثانیه را از سرور Arch Linux بگیرم.

نتیجه گیری

به طور آشکار این نتایج کارایی واقع بینانه سرور را منعکس نمی کنند. HTTP فقط قطعه ای از یک پازل است.یک س قالب گیرنده آهسته و /یا پایگاه داده ، باعث خواهند شد که این اعداد به مقدار قابل توجهی پایین بیایند.با وجود این ارقام براورد سریع را برای مقایسه در اختیار شما قرار می دهد.
ابزارهای عملکرد دیگر که ممکن است مورد علاقه شما باشد:

 

منبع

ترجمه توسط : آرزو رنجبرپور

لینک کوتاه مقاله :