SIEGE(1) Siege Load Tester SIEGE(1)

siege - ابزار تست بار و سنجش کارایی HTTP/FTP

siege [options]
siege [options] <URL>
siege [options] -g <URL>
siege [options] -f urls.txt

siege یک ابزار چندنخی (multi-threaded) برای تست بار و سنجش کارایی (benchmarking) پروتکل‌های HTTP/FTP است. این ابزار از بیشتر قابلیت‌های شرح‌داده‌شده در RFC 2616 (HTTP) و RFC 959 (FTP) پشتیبانی می‌کند. ویژگی‌ها را می‌توان هم از طریق خط فرمان و هم در یک فایل پیکربندی تنظیم کرد. هنگامی که یک ویژگی در هر دو مکان تنظیم شده باشد، خط فرمان اولویت دارد.

فایل پیکربندی پیش‌فرض $HOME/.siege/siege.conf است. اگر دایرکتوری $HOME/.siege و فایل‌های siege.conf و cookies.txt را ندارید، siege هنگام اجرا یک دایرکتوری پیکربندی جدید ایجاد خواهد کرد. شما همچنین می‌توانید دایرکتوری پیکربندی خود را با دستور siege.config ایجاد کنید.

siege از گزینه‌های کوتاه و بلند پشتیبانی می‌کند. گزینه‌های کوتاه به این صورت هستند:
-c 25
-c25

گزینه‌های بلند به این صورت هستند:
--concurrent=25

نسخه انتشار siege و اطلاعات کپی‌رایت را نمایش می‌دهد.
پیام راهنمایی شامل توصیف گزینه‌های خط فرمان siege را چاپ می‌کند.
خلاصه‌ای با جزئیات از تمام گزینه‌های پیکربندی‌شده فعلی را چاپ می‌کند که بیشتر آن‌ها در $HOME/.siege/siege.conf تنظیم شده‌اند.
این دستور siege را در حالت پرحرف (verbose) قرار می‌دهد که در واقع تنظیمات پیش‌فرض است. این گزینه خط فرمان زمانی کاربرد دارد که در فایل پیکربندی مقدار 'verbose = false' تعیین شده باشد و به شما امکان می‌دهد آن را بازنویسی (override) کنید.

به‌طور پیش‌فرض، خروجی پرحرف siege با کدگذاری رنگی نمایش داده می‌شود:
* کدهای HTTP 2xx به رنگ آبی
* کدهای HTTP 3xx به رنگ فیروزه‌ای (cyan)
* کدهای HTTP 4xx به رنگ ارغوانی (magenta)
* کدهای HTTP 5xx به رنگ قرمز
* پاسخ‌های ذخیره‌شده در حافظه پنهان HTTP به رنگ سیاه

نکته: می‌توانید رنگ را در siege.conf به این صورت غیرفعال کنید: 'color = off'

این دستور siege را بی‌صدا می‌کند. این گزینه بیشتر در اسکریپت‌ها استفاده می‌شود و اغلب همراه با -g/--get به کار می‌رود. می‌توانید موفقیت یا عدم موفقیت اجرا را از طریق وضعیت خروج (exit code) آن بررسی کنید.
siege --quiet -g www.joedog.org
if [ $? -eq 0 ] ; then
  echo "Success"
else
  echo "Failure"
fi
این گزینه به شما اجازه می‌دهد یک URL را درخواست کرده و تبادل سرایندها (headers) را مشاهده کنید. یک دستور متناظر نیز در فایل پیکربندی وجود دارد که به شما امکان می‌دهد متد درخواست را برای این درخواست‌ها تعیین کنید: gmethod = HEAD|GET
$ siege -g "https://www.joedog.org"
HEAD / HTTP/1.0
Host: www.joedog.org
Accept: */*
User-Agent: Mozilla/5.0 (unknown-x86_64-linux-gnu) Siege/4.0.0-beta5
Connection: close
HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Tue, 09 Feb 2016 18:18:41 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Last-Modified: Wed, 25 Nov 2015 18:46:08 GMT
Cache-Control: max-age=3, must-revalidate
Expires: Tue, 09 Feb 2016 18:18:44 GMT
Vary: Accept-Encoding,Cookie
CF-RAY: 27219407eeff084a-IAD

نکته: بهترین شیوه این است که هنگام ارسال URL به siege از خط فرمان، آن را داخل علامت نقل‌قول قرار دهید.

این گزینه مشابه -g / --get است، اما صفحه‌ای را که از سرور دریافت کرده است چاپ می‌کند.
$ siege -p http://www.joedog.org
GET / HTTP/1.0
Host: www.joedog.org
Accept: */*
User-Agent: Mozilla/5.0 (unknown-x86_64-linux-gnu) Siege/4.0.3rc1
Connection: close
HTTP/1.1 301 Moved Permanently
Date: Wed, 19 Oct 2016 16:58:13 GMT
Content-Type: text/html; charset=iso-8859-1
Location: https://www.joedog.org
Server: cloudflare-nginx
Connection: close
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.joedog.org">here</a>.</p>
<hr>
<address>Apache/2.2.31 (Amazon) Server at www.joedog.org Port 80</address>
</body></html>
این گزینه به شما امکان می‌دهد تعداد کاربران هم‌زمان را تنظیم کنید. تعداد کل کاربران از نظر فنی به منابع سیستم شما محدود است.

نباید تعداد کاربرانی بیشتر از ظرفیت تنظیم‌شده وب‌سرور خود تعیین کنید. برای نمونه، در پیکربندی پیش‌فرض apache حداکثر ۲۵۵ رشته (thread) در نظر گرفته شده است. اگر siege را با -c 1024 اجرا کنید، ۷۶۹ کاربر siege در انتظار پاسخ apache معطل خواهند ماند.

به همین دلیل، پیکربندی پیش‌فرض siege به ۲۵۵ کاربر محدود شده است. می‌توانید این عدد را درون siege.conf افزایش دهید، اما اگر اختلالی پیش آمد، مسئولیتی متوجه ما نخواهد بود.

این گزینه به هر کاربر siege می‌گوید که چند بار باید اجرا شود. مقدار آن معمولاً باید عددی بزرگ‌تر از صفر باشد، اما می‌تواند کلمه کلیدی 'once' نیز باشد.

اگر --reps=3 باشد، هر کاربر siege قبل از خروج سه بار اجرا خواهد شد. با این حال، اگر --reps=once باشد، هر کاربر دقیقاً یک بار فایل urls.txt را تا انتها پیمایش و اجرا می‌کند.

برای اطلاعات بیشتر درباره فایل urls.txt، گزینه -f <file>،--file=<file> را ببینید.

این گزینه مشابه --reps است، اما به جای مشخص کردن تعداد دفعات اجرای هر کاربر، مدت زمانی را که هر کاربر باید اجرا شود مشخص می‌کند.

قالب مقدار به صورت "NUMm" است که در آن "NUM" بیانگر مقدار زمان و پسوند "m" یکی از حروف S، M یا H به ترتیب برای ثانیه، دقیقه و ساعت است. برای اجرای siege به مدت یک ساعت، می‌توانید هر یک از ترکیب‌های زیر را انتخاب کنید: -t3600S، -t60M، -t1H. این پسوند به بزرگی و کوچکی حروف حساس نیست، اما نباید هیچ فاصله‌ای بین عدد و حرف پسوند وجود داشته باشد.

این گزینه به siege دستور می‌دهد که بین درخواست هر صفحه چقدر تأخیر داشته باشد. مقدار NUM نمایانگر تعداد ثانیه‌ها بین هر درخواست است. این عدد می‌تواند مقداری اعشاری باشد. در واقع مقدار پیش‌فرض نیم ثانیه است (--delay=0.5).

زمان تأخیر بین درخواست‌ها در زمان تراکنش (transaction time) محاسبه نمی‌شود. اگر دو تراکنش ۰٫۱ ثانیه‌ای دارای ۲ ثانیه تأخیر بین خود باشند، میانگین زمان تراکنش آن‌ها ۰٫۱ ثانیه است. این زمان بر روی کل زمان سپری‌شده (elapsed time) اعمال می‌شود؛ در این حالت، کل زمان سپری‌شده ۲٫۲ ثانیه خواهد بود.

نکته: هنگامی که تجزیه‌گر (parser) فعال است (ببینید: -p/--parser)، هیچ تأخیری بین صفحه و اجزای داخلی آن، یعنی شیوه‌نامه‌ها، فایل‌های جاوااسکریپت و غیره اعمال نمی‌شود. تأخیر فقط بین درخواست‌های کل صفحات اعمال می‌گردد..IP "-b, --benchmark" 4 این دستور به siege اعلام می‌کند که به حالت بنچمارک برود. این بدان معناست که هیچ تأخیری بین تکرارها وجود نخواهد داشت.

این گزینه siege را در حالتی که حالت اینترنت (internet mode) نامیده می‌شود قرار می‌دهد. این گزینه درخواست‌ها را از فایل urls.txt (ببینید: -f <file> / --file=<file>) به ترتیبی تصادفی ارسال می‌کند.
این گزینه به siege اعلام می‌کند که با فهرستی از URLها در یک فایل متنی کار کند. URLها در هر خط به صورت مجزا فهرست می‌شوند. بر خلاف URLهایی که به عنوان آرگومان خط فرمان ارسال می‌شوند، URLها در این فایل نباید داخل نقل‌قول (کوتیشن) قرار گیرند.

تجزیه‌کنندهٔ urls.txt در siege از کامنت‌ها و متغیرها پشتیبانی می‌کند. از آنجا که siege از علامت دلار ($) به عنوان پیشوند برای متغیرهای اسکالر استفاده می‌کند، باید هر متغیری را که می‌خواهید به سرور ارسال شود گریزدهی (escape) کنید:

https://$(HOST)/siege/jsoner.php POST {"price": "\$10 per mile"}
این دستور به شما امکان می‌دهد یک فایل منبع (resource file) جایگزین تعیین کنید. به صورت پیش‌فرض، فایل siegerc در مسیر $HOME/.siege/siege.conf قرار دارد. با این دستور، می‌توانید مقدار پیش‌فرض را لغو کرده و از یک فایل جایگزین استفاده کنید.
فایل لاگ پیش‌فرض $prefix/var/log/siege.log است. این دستور به شما اجازه می‌دهد فایلی جایگزین را برای ثبت وقایع مشخص کنید.
این گزینه به شما امکان می‌دهد پیامی را پیش از ثبت آمار در فایل لاگ بنویسید. این گزینه عموماً برای مشخص کردن و شناسایی اجرای بعدی استفاده می‌شود. برای نمونه، می‌توانید فایل را با پارامترهای خط فرمان خود علامت‌گذاری کنید تا مشخص شود چه پیکربندی داده‌های بعدی را تولید کرده است.
این گزینه به شما اجازه می‌دهد یک هدر سفارشی در درخواست تنظیم کنید. به طور کلی، این هدر جایگزین هدرهای موجود خواهد شد. هدر Cookie یک مورد استثنا است. اگر -H "Cookie: value" را تنظیم کنید، siege آن کوکی را علاوه‌بر سایر کوکی‌ها ارسال خواهد کرد.
این گزینه به شما اجازه می‌دهد user-agent پیش‌فرض را با مقداری سفارشی بازنویسی کنید.
siege --agent="JoeDog Jr. in da hizzle"

این هدر را تنظیم خواهد کرد:

User-agent: JoeDog Jr. in da hizzle

همچنین می‌توانید User-agent را با گزینهٔ -H/--header در بالا تنظیم کنید.

این میان‌بر دیگری برای تنظیم هدر است. شما از این گزینه برای بازنویسی هدر پیش‌فرض Content-type در درخواست استفاده می‌کنید.
تجزیه‌کنندهٔ HTML را خاموش می‌کند. هنگامی که siege صفحه‌ای را دانلود می‌کند، آن را برای یافتن عناصر اضافی صفحه مانند style-sheetها، javascript و تصاویر تجزیه می‌کند. برای هر عنصری که پیدا کند درخواست‌های اضافی ارسال خواهد کرد. با فعال بودن این گزینه، siege پس از دریافت صفحهٔ اصلی متوقف خواهد شد.
این دستور به siege اعلام می‌کند که تغییرمسیرهای (redirects) کد 3xx را دنبال نکند.

ابزار siege از قالب‌های RFC 1738 URL پشتیبانی می‌کند اما تلاش فراوانی کرده تا میان‌برهای پرکاربرد را برای راحتی شما پیاده‌سازی کند. علاوه‌بر قالب‌های RFC 1738، نرم‌افزار siege قالب URL اختصاصی خود را نیز برای مشخص کردن متد پروتکل معرفی می‌کند.

یک RFC 1738 URL به این صورت است:
<scheme>://<username>:<password>@<hostname>:<port>/<path>;<params>?<query>#<frag>

یک URL در siege همراه با نشانگر متد بدین شکل است:
<scheme>://<username>:<password>@<hostname>:<port>/<path> POST <query>

همچنین می‌توانید محتوای یک فایل را با استفاده از نویسهٔ هدایت به این صورت ارسال (POST) کنید:
<scheme>://<username>:<password>@<hostname>:<port>/<path> POST </home/jeff/haha.txt

در اینجا دو مثال همراه با نشانگر متد siege آورده شده است:
http://www.joedog.org POST haha=papa&dada=mama
ftp://ftp.armstrong.com/ PUT </home/jdfulmer/etc/tests/bbc.jpg

نکته: اگر URLها را همراه با نشانگرهای متد در خط فرمان تنظیم می‌کنید، باید عبارت را داخل نقل‌قول (کوتیشن) قرار دهید، در غیر این صورت پوسته با آن مانند سه آرگومان مجزا رفتار خواهد کرد. اگر URL در یک فایل urls.txt قرار دارد، نباید آن را درون کوتیشن بگذارید.

همان‌طور که در بالا اشاره شد، siege تلاش زیادی می‌کند تا میان‌برهای رایجی را که در اکثر پیاده‌سازی‌های مرورگرها به آن‌ها عادت دارید فراهم سازد. این ابزار بخش‌های زیادی از URL در 1738 را اختیاری در نظر می‌گیرد. در این مثال، بخش‌های درون قلاب اختیاری هستند:
[scheme://] host.domain.xxx [:port] [/path/file]

هنگامی که siege نام میزبان را دریافت می‌کند، URL را با فرضیات پیش‌فرض می‌سازد. www.joedog.org تبدیل می‌شود به http://www.joedog.org:80.SH "فایل URLS.txt (URLS.txt FILE)" از بخش «Option Syntax» در بالا می‌آموزیم که siege می‌تواند یک URL را به عنوان آرگومان بپذیرد. دستور siege -c -r2 www.joedog.org صفحه اصلی JoeDog را دو بار درخواست خواهد کرد. اما اگر بخواهید بخش‌های بزرگی از وبگاه را هدف بگیرید چه؟ siege به شما امکان می‌دهد فایلی را با URLها پر کنید تا بتواند در طول این فهرست اجرا شود.

قالب این فایل به صورت یک URL در هر خط است:
https://www.joedog.org
https://www.joedog.org/haha
https://www.joedog.org/haha POST homer=simpson&marge=doestoo

این فایل همچنین از کامنت‌گذاری به سبک UNIX پشتیبانی می‌کند:
# Comment looks like this
https://www.joedog.org
https://www.joedog.org/haha
https://www.joedog.org/haha POST homer=simpson&marge=doestoo

این فایل از تعریف متغیر و ارجاع به آن به سبک پوسته (shell) پشتیبانی می‌کند. این قابلیت در صورتی که بخواهید یک آزمون مشابه را روی دو لایه (tier) مختلف یا دو طرح (scheme) متفاوت اجرا کنید، بسیار راحت است:

SCHEME=https
HOST=bart.joedog.org
$(SCHEME)://$(HOST)/
$(SCHEME)://$(HOST)/haha/
$(SCHEME)://$(HOST)/haha/ POST homer=simpson&marge=doestoo

می‌توانید با استفاده از گزینه -f/--file این فایل را به siege معرفی کنید:
siege -c1 -r50 -f /home/jeff/urls.txt

هنگامی که اجرای برنامه کامل شد، siege داده‌های عملکرد را از تمام کلاینت‌های خود جمع‌آوری کرده و پس از اجرا آن‌ها را خلاصه می‌کند. (همچنین می‌توانید این اعداد را در وقایع ثبت کنید). خروجی خط فرمان از اسکریپت torture.pl متعلق به لینکلن اشتاین (Lincoln Stein) الگوبرداری شده است:

  Transactions:                   2000 hits
  Availability:                 100.00 %
  Elapsed time:                  58.57 secs
  Data transferred:               5.75 MB
  Response time:                  0.25 secs
  Transaction rate:              34.15 trans/sec
  Throughput:                     0.10 MB/sec
  Concurrency:                    8.45
  Successful transactions:        2000
  Failed transactions:               0
  Longest transaction:            4.62
  Shortest transaction:           0.00
  Transactions (تراکنش‌ها)
      این عدد نمایانگر تعداد کل درخواست‌های HTTP است. در این مثال،
      ما ۲۵ کاربر شبیه‌سازی‌شده [-c25] را اجرا کردیم و هر کدام ۱۰ بار
      [-r10] اجرا شدند. حاصل‌ضرب بیست و پنج در ده برابر ۲۵۰ است،
      پس چرا مجموع تراکنش‌ها ۲۰۰۰ است؟ زیرا siege هر درخواست را به
      حساب می‌آورد. این اجرا شامل یک تغییرمسیر META و یک تغییرمسیر 301
      بود و صفحه درخواست‌شده حاوی چندین مؤلفه بود که آن‌ها نیز دریافت
      شدند.
  Availability (در دسترس بودن)
      این درصد اتصالات سوکتی است که با موفقیت توسط سرور مدیریت شده‌اند.
      این مقدار حاصل تقسیم شکست‌های سوکت (شامل اتمام مهلت / timeouts)
      بر مجموع تمام تلاش‌های اتصال است. این عدد خطاهای سرور در رده 400
      و 500 را شامل نمی‌شود؛ این خطاها در بخش «Failed transactions» در
      ادامه ثبت می‌شوند.
  Elapsed time (زمان سپری‌شده)
      مدت زمان کل آزمون siege است. این زمان از لحظه فراخوانی siege
      توسط کاربر تا زمانی که آخرین کاربر شبیه‌سازی‌شده تراکنش‌های خود
      را کامل کند، اندازه‌گیری می‌شود. همان‌طور که در بالا نشان داده
      شده، تکمیل آزمون 58.57 ثانیه طول کشیده است.
  Data transferred (داده‌های منتقل‌شده)
      مجموع داده‌های منتقل‌شده به تمام کاربران شبیه‌سازی‌شده siege است.
      این مقدار شامل اطلاعات سرایند (header) و محتوا است. از آنجا که
      این مقدار شامل اطلاعات سرایند است، عدد گزارش‌شده توسط siege از
      عدد گزارش‌شده توسط سرور بزرگ‌تر خواهد بود. در حالت اینترنت (internet
      mode) که URLهای تصادفی را از یک فایل پیکربندی هدف قرار می‌دهد،
      انتظار می‌رود این مقدار از اجرایی به اجرای دیگر تغییر کند.
  Response time (زمان پاسخ‌دهی)
      میانگین زمانی که برای پاسخ دادن به درخواست‌های هر کاربر شبیه‌سازی‌شده
      صرف شده است.
  Transaction rate (نرخ تراکنش)
      میانگین تعداد تراکنش‌هایی که سرور در هر ثانیه قادر به مدیریت آن‌ها
      بوده است؛ به طور خلاصه: تعداد کل تراکنش‌ها تقسیم بر زمان سپری‌شده.
  Throughput (توان عملیاتی)
      میانگین تعداد بایت‌های منتقل‌شده در هر ثانیه از سرور به تمام کاربران
      شبیه‌سازی‌شده.
  Concurrency (هم‌زمانی)
      میانگین تعداد اتصالات هم‌زمان است. این معیار به این صورت محاسبه
      می‌شود: مجموع زمان تمام تراکنش‌ها تقسیم بر زمان سپری‌شده (مدت زمانی
      که siege اجرا شد).
  Successful transactions (تراکنش‌های موفق)
      تعداد دفعاتی که سرور با یک کد بازگشتی کوچک‌تر از ۴۰۰ (< 400) پاسخ
      داده است.
  Failed transactions (تراکنش‌های ناموفق)
      تعداد دفعاتی که تراکنش‌های سوکت با شکست مواجه شدند، که شامل اتمام
      مهلت سوکت (socket timeouts) نیز می‌شود.
  Longest transaction (طولانی‌ترین تراکنش)
      بیشترین مدت زمانی که یک تراکنش منفرد در میان تمام تراکنش‌ها به خود
      اختصاص داده است.
  Shortest transaction (کوتاه‌ترین تراکنش)
      کمترین مدت زمانی که یک تراکنش منفرد در میان تمام تراکنش‌ها به خود
      اختصاص داده است.
Jeffrey Fulmer, et al. <jeff@joedog.org> نویسنده اصلی siege است. افراد پرشماری 
در سراسر جهان نیز در این برنامه مشارکت داشته‌اند. مشارکت‌های آنان 
در ChangeLog کد منبع ثبت شده است.

حق نشر متعلق به Jeffrey Fulmer, et al. <jeff@joedog.org>

این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «پروانه عمومی همگانی گنو» (GNU General Public License) که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است، بازتوزیع کرده یا تغییر دهید؛ چه نسخهٔ ۲ پروانه، یا (به انتخاب خودتان) هر نسخهٔ بعدی دیگر.

این برنامه با این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابلیت فروش یا تناسب برای یک هدف خاص. برای جزئیات بیشتر به GNU General Public License مراجعه کنید.

شما باید به همراه این برنامه یک نسخه از GNU General Public License را دریافت کرده باشید؛ در غیر این صورت، با بنیاد نرم‌افزارهای آزاد مکاتبه کنید: Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

جدیدترین نسخهٔ منتشرشده از siege از طریق بارگیری HTTP در دسترس است:
http://download.joedog.org/pub/siege

siege.config(1) bombardment(1) siege2csv(1)

2024-11-14 JoeDog