Skip navigation.

Corey Goldberg

Syndicate content
Blog - Technology, Software, Programming, Performance
Updated: 20 hours 53 min ago

Monitoring Stats From Memcached or Membase (Python, RRDTool)

Tue, 08/03/2010 - 14:02
p a href="http://code.google.com/p/corey-projects/source/browse/trunk/python2/memcached/memcached_stats_rrd.py"memcached_stats_rrd.py/a is a script for monitoring and graphing stats from Memcached or Membase. /p p Memcached is a high-performance, distributed memory object caching system, and Membase is the related key-value database management system. Both are open source, with packaged/commercial versions distributed by a href="http://www.northscale.com/"NorthScale/a. They both use the memcached protocol for communication, so this script will work against a vanilla memcached installation, or against a membase server/cluster. /p p For more info: /p ul liMemcached: a href="http://memcached.org"http://memcached.org/a/li liMembase: a href="http://membase.org"http://membase.org/a/li /ul hr / p script source code: a href="http://code.google.com/p/corey-projects/source/browse/trunk/python2/memcached/memcached_stats_rrd.py"memcached_stats_rrd.py/a /p p This script is useful for ad-hoc monitoring or longer term trend/capacity analysis. It collects data, stores it in RRD databases, and outputs graphs and stats in the form of PNG images. You can monitor any stats that memcached/membase publishes and graph them over specified time spans. It will generate an image file for each stat, for each time span selected. /p pThis mini monitoring system is built with:/p ul lia href="http://pypi.python.org/pypi/python-memcached/"python-memcached/a/li lia href="http://oss.oetiker.ch/rrdtool/"RRDTool/a/li lia href="https://help.ubuntu.com/community/CronHowto"cron/a (or other task/job scheduler)/li /ul pSample Graph/Image Output:/p a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_k7-jvtv2cLo/TER96OYSzxI/AAAAAAAAAr4/aPRpI4t4pIs/s1600/memcached_rrd_bytes_read_180.png"img style="cursor:pointer; cursor:hand;width: 400px; height: 182px;" src="http://1.bp.blogspot.com/_k7-jvtv2cLo/TER96OYSzxI/AAAAAAAAAr4/aPRpI4t4pIs/s400/memcached_rrd_bytes_read_180.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5495655884544724754" //a br / (bytes_read, 3 hour timespan, 60 sec collection interval)br / a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_k7-jvtv2cLo/TER96V9-zkI/AAAAAAAAAsA/5SBkZx7_hw4/s1600/memcached_rrd_mem_used_60.png"img style="cursor:pointer; cursor:hand;width: 400px; height: 182px;" src="http://2.bp.blogspot.com/_k7-jvtv2cLo/TER96V9-zkI/AAAAAAAAAsA/5SBkZx7_hw4/s400/memcached_rrd_mem_used_60.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5495655886581845570" //a br / (mem_used, 1 hour timespan, 60 sec collection interval)br / p It will generate images in the directory you specify. I have an Apache web server installed serving content from the output directory for easy web viewing. You can wrap the images in some HTML and create a little dashboard to watch your entire memcached/membase cluster, like this: /p a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_k7-jvtv2cLo/TER95p0g-PI/AAAAAAAAArw/SHFlsaDV2jM/s1600/memcached_rrd_2node_dashboard_240.png"img style="cursor:pointer; cursor:hand;width: 400px; height: 338px;" src="http://1.bp.blogspot.com/_k7-jvtv2cLo/TER95p0g-PI/AAAAAAAAArw/SHFlsaDV2jM/s400/memcached_rrd_2node_dashboard_240.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5495655874730981618" //a br / (4 hour timespan, 60 sec collection interval, 2 nodes, 3 stats each)br / hr / p Instructions... /p p strong1)/strong Install prerequisites /p p You will need the following software installed: /p ul liPython 2.x/li lipython-memcached (memcached client for Python)/li liRRDTool (round-robin database, logging/graphing backend)/li /ul p on Debian/Ubuntu: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" $ sudo apt-get install -y python-memcache $ sudo apt-get install -y rrdtool /pre p strong2)/strong Configure the script /p p Near the top of the script, there are a few configuration settings: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" # Config Settings NODES = ('192.168.1.3:11211', '192.168.1.4:11211') INTERVAL = 60 STATS = (('curr_items', 'GAUGE'), ('bytes_written', 'COUNTER')) GRAPH_MINS = (60, 180) GRAPH_DIR = '/var/www/' /pre pConfig Setting Definitions:/p ul liNODES: list of memcached/membase nodes to monitor./li liINTERVAL: collection interval in seconds. This should be the same value as you schedule the script to run./li liSTATS: list of tuples containing (stat_name, datasource_type), where "stat_name" is a memcached/membase stat, and "datasource_type" is an RRDTool data source type (DST). The most useful data source types are GAUGE and COUNTER. GAUGE is used to report a current value, and COUNTER is used for continuous incrementing counters. (see: a href="http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html"http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html/a for more info on RRD data sources)/li liGRAPH_MINS: list of minutes, corresponding to time spans displayed in the output graphs. An image for each stat is generated for each value here./li liGRAPH_DIR: directory to generate out images in./li /ul p After you have the script configured, make the script executable: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" $ chmod +x memcached_stats_rrd.py /pre p strong3)/strong Schedule the script /p p You can add an entry to your crontab (crontab -e) so cron will run it regularly. The example here uses a 60 sec (1 min) interval: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" */1 * * * * /home/perfserver/memcached_stats_rrd.py /pre p em[These instructions are for Linux/Unix, but you can configure a similar system on Windows using Task Scheduler instead of cron. The code in memcached_stats_rrd.py works cross-platform.]/em /pdiv class="blogger-post-footer"img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-7035108896037480077?l=coreygoldberg.blogspot.com' alt='' //div
Categories: Load & Perf Testing

Load Testing Web Services with Python and Multi-Mechanize

Sun, 08/01/2010 - 17:48
pem(originally posted at a href="http://coreygoldberg.blogspot.com/"coreygoldberg.blogspot.com/a)/em/p p I had to test and benchmark a a href="http://en.wikipedia.org/wiki/SOAP"SOAP/a web service recently, and figured I'd write up some instructions for load testing with Multi-Mechanize. /p p Multi-Mechanize is a performance and load testing framework that enables you to write plugins (in Python) to create virtual user scripts that run in parallel against your service. /p ul liProject Home: a href="http://multimechanize.com"multimechanize.com/a/li liVirtual User Script Development Guide: a href="http://code.google.com/p/multi-mechanize/wiki/DevelopingScripts"DevelopingScripts/a/li /ul p Since Multi-Mechanize scripts are pure Python, you can use any Python module inside them. In the case of a web service that uses SOAP, you have a few options. You can use any 3rd party module, so something like a href="http://pypi.python.org/pypi/suds"Suds/a (a lightweight SOAP client lib) would be a reasonable choice. However, I decided to stick with the Python standard library and build my scripts with a href="http://docs.python.org/library/urllib2.html"urllib2/a. Afterall, SOAP is just slinging a bunch of XML back-and-forth over HTTP. /p p So before I get started with Multi-Mechanize and performance/load testing... /p p Here is a Python (2.x) script using urllib2 to interact with a SOAP web service over HTTP: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" import urllib2 with open('soap.xml') as f: soap_body = f.read() req = urllib2.Request(url='http://www.foo.com/service', data=soap_body) req.add_header('Content-Type', 'text/xml') resp = urllib2.urlopen(req) content = resp.read() /pre p em(The script above assumes you have a file named 'soap.xml' in the local directory that contains your payload (SOAP XML message). It will send an HTTP POST request containing your payload in the body.)/em /p p After the initial script is created in Python, the next step is to convert it into a Multi-Mechanize script. To do this, you create a Transaction class with a run() method and add your code there. /p p As a Multi-Mechanize script, the same thing would be done like this: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" import urllib2 class Transaction(object): def __init__(self): with open('soap.xml') as f: self.soap_body = f.read() def run(self): req = urllib2.Request(url='http://www.foo.com/service', data=self.soap_body) req.add_header('Content-Type', 'text/xml') resp = urllib2.urlopen(req) content = resp.read() assert ('Example SOAP Response' in content), 'Failed Content Verification' /pre p em(Notice I also added an assert statement to verify the content returned from the service.)/em /p p Now that you have a script created, it's time to configure Multi-Mechanize and run some tests. /p p You can download Multi-Mechanize from: a href="http://code.google.com/p/multi-mechanize/downloads/list"code.google.com/abr / It requires Python 2.x (2.6 or 2.7), and if you want it to generate graphs, you must also install Matplotlib and its dependencies. See the a href="http://code.google.com/p/multi-mechanize/wiki/FAQ"FAQ/a for help. /p p Once you have Multi-Mechanize downloaded, unzip it and go to the "/projects" directory. You can create a new project directory here. You can call it "soap_project". Inside this directory, you will need 2 things: a config file ("config.cfg"), and a "test_scripts" directory (containing the script you previously created, which you can call "soap_client.py". Since the script is looking for a data file named "soap.xml", make sure you have one created in the main multi-mechanize directory. /p p The directory and file layout will look like this: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" /multi-mechanize /lib /projects /soap_project /test_scripts soap_client.py config.cfg multi-mechanize.py soap.xml /pre p em(you can see the "default_project" for an example of how it should be setup.)/em /p p To begin with, you can use a simple config.cfg file like this: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" [global] run_time: 30 rampup: 0 console_logging: on results_ts_interval: 10 [user_group-1] threads: 1 script: soap_client.py /pre p This will just a run a single thread of your virtual user script for 30 seconds; good enough for testing and getting things going. /p p To run a test, go to the topmost multi-mechanize directory and run: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" $ python multi-mechanize.py soap_project /pre p em(You should see timer output in the console.)/em /p p Once you have things running well, you can turn off "console_logging" and increase the workload. It will take some adjustment and plenty of trials to get the load dialed in correctly for your service. You can also get a lot more sophisticated with your workload model and create multiple virtual user scripts doing different transactions. In this case, I'll keep it simple and just test one web service request type in isolation. /p p Once I ran plenty of iterations and got a feel for how the service responded and what its limits were, I settled with a config file like this: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" [global] run_time: 900 rampup: 900 console_logging: off results_ts_interval: 90 [user_group-1] threads: 30 script: soap_client.py /pre p em(30 threads, increasing load over 15 mins)/em /p p After each test run you do, a new results directory is created containing your test results. Look for "results.html" and view it in your browser to see the output report. /p hr / br / p Have questions about a href="http://multimechanize.com"Multi-Mechanize/a?br / Post to the discussion group: a href="http://groups.google.com/group/multi-mechanize"groups.google.com/group/multi-mechanize/a /pdiv class="blogger-post-footer"img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-4760682998727562735?l=coreygoldberg.blogspot.com' alt='' //div
Categories: Load & Perf Testing

Rackspace Cloud - Outbound Bandwidth Caps, Network Too Slow

Tue, 07/27/2010 - 09:11
p Have you seen the network/bandwidth caps that a href="http://www.rackspacecloud.com"Rackspace/a places on their cloud servers? /p p From the a href="http://cloudservers.rackspacecloud.com/index.php/Frequently_Asked_Questions"Rackspace Cloud Server FAQ/a: /p blockquote p em "Your Cloud Server has a bandwidth cap that is applied in relation to the size of the server. Please note that the bandwidth caps are placed on outbound bandwidth only. Inbound bandwidth is not capped." /em /p table trtdServer Size/tdtdPublic Limit/tdtdServiceNet Limit/td/tr trtd256MB/tdtd10 Mbps/tdtd20 Mbps/td/tr trtd512MB/tdtd20 Mbps/tdtd40 Mbps/td/tr trtd1024MB/tdtd30 Mbps/tdtd60 Mbps/td/tr trtd2048MB/tdtd40 Mbps/tdtd80 Mbps/td/tr trtd4096MB/tdtd50 Mbps/tdtd100 Mbps/td/tr trtd8192MB/tdtd60 Mbps/tdtd120 Mbps/td/tr trtd15872MB/tdtd70 Mbps/tdtd140 Mbps/td/tr /table /blockquote p I was going to use the Rackspace Cloud to do some performance testing of a new server. I wanted to run 2 servers in a clustered mode, replicating data to each other. My first concern was the speed of the internal network interconnects between cloud nodes. /p p After doing some research, I realized the bandwidth caps make it a non-starter. 20-140 Mbps private interconnects?? That's not enough. I would saturate the network almost immediately, even on their largest server class. Sorry Rackspace. /p p In comparison, a href="http://aws.amazon.com/ec2/"Amazon's EC2 Cloud/a offers High Performance Computing nodes with 10 Gigabit interconnects: a href="http://aws.amazon.com/hpc-applications/"Amazon HPC/a /pdiv class="blogger-post-footer"img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-3217723913347784700?l=coreygoldberg.blogspot.com' alt='' //div
Categories: Load & Perf Testing

WebInject - New Discussion Group Launched

Sun, 07/25/2010 - 10:52
p I just started a new discussion group for WebInject:br / br / a href="http://groups.google.com/group/webinject"http://groups.google.com/group/webinject/a /p p The old forums (a href="http://www.webinject.org/cgi-bin/forums/YaBB.cgi"http://www.webinject.org/cgi-bin/forums/YaBB.cgi/a) have been broken for several years. I will leave them up in read-only mode, but some threads are broken and unviewable. /p p Feel free to post a message to this new discussion group.br / questions, bugs, patches, collaboration, comments, welcome... /p p Updates and new development coming soon... /p p br / ema href="http://www.webinject.org"WebInject/a is a free tool for automated testing and monitoring of web applications or services. It can be used standalone, or as a plugin for external monitoring systems./em /pdiv class="blogger-post-footer"img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-3914653040547693196?l=coreygoldberg.blogspot.com' alt='' //div
Categories: Load & Perf Testing

Membase Stats Report (Python)

Fri, 07/23/2010 - 15:22
p em[a href="http://membase.org/"Membase/a is a high-performance, distributed key-value database (NoSQL)]/em /p p To check operational stats of your Membase server/cluster, you can use the telnet interface (port 11211) and issue the stats command to any individual node: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" $ telnet 192.168.12.11 11211 stats /pre p The output is unsorted and a little difficult to read at quick glance. /p hr / p I use the following Python script for getting a quick snapshot of stats from Membase in a more readable format. Since Membase speaks the a href="http://memcached.org/"Memcached/a protocol, I use the a href="http://pypi.python.org/pypi/python-memcached"python-memcached/a module. List all nodes you want stats from. /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" #!/usr/bin/env python # Corey Goldberg - 2010 (goldb.org) # print a stats report from membase key-value database (membase.org) # python 2.x # requires python-memcached import memcache NODES = ('192.168.12.11:11211',) mc = memcache.Client(NODES) for node_stats in mc.get_stats(): server, stats = node_stats print '-----------------------------------------' print server print '-----------------------------------------' for stat_name, value in sorted(stats.iteritems()): if not stat_name.startswith('ep'): if stat_name not in ('libevent', 'version'): print stat_name.ljust(25), value.rjust(15) print '-----------------------------------------' for stat_name, value in sorted(stats.iteritems()): if stat_name.startswith('ep'): if stat_name not in ('ep_dbname', 'ep_version'): print stat_name.ljust(25), value.rjust(15) /pre p sample output (1 node): /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;" $ python membase_stats_report.py ----------------------------------------- 127.0.0.1:11211 (1) ----------------------------------------- auth_cmds 0 auth_errors 0 bytes_read 81754885 bytes_written 77239947 cas_badval 0 cas_hits 0 cas_misses 0 cmd_flush 1 cmd_get 370229 cmd_set 380230 conn_yields 0 connection_structures 16 curr_connections 16 curr_items 178679 daemon_connections 10 decr_hits 0 decr_misses 0 delete_hits 0 delete_misses 0 get_hits 370228 get_misses 1 incr_hits 0 incr_misses 0 limit_maxbytes 67108864 mem_used 40909042 pid 2009 pointer_size 64 rejected_conns 0 rusage_system 65.660000 rusage_user 113.320000 threads 4 time 1278257466 total_connections 16 uptime 592 ----------------------------------------- ep_commit_time 1 ep_data_age 286 ep_data_age_highwat 286 ep_dbinit 0 ep_flush_duration 1 ep_flush_duration_highwat 2 ep_flusher_state running ep_flusher_todo 483 ep_item_commit_failed 0 ep_item_flush_failed 0 ep_max_txn_size 50000 ep_min_data_age 1 ep_queue_age_cap 5 ep_queue_size 176786 ep_storage_age 286 ep_storage_age_highwat 286 ep_tap_keepalive 0 ep_tap_total_fetched 0 ep_tap_total_queue 0 ep_too_old 1410 ep_too_young 56372 ep_total_enqueued 380487 ep_total_persisted 198703 ep_warmed_up 479990 ep_warmup true ep_warmup_thread complete ep_warmup_time 4 /pre p script source code: a href="http://code.google.com/p/corey-projects/source/browse/trunk/python2/memcached/membase_stats_report.py"membase_stats_report.py/a /p p For more advaned stats and graphing from Memcached and Membase, see:br / a href="http://coreygoldberg.blogspot.com/2010/07/monitoring-stats-from-memcached-or.html"http://coreygoldberg.blogspot.com/2010/07/monitoring-stats-from-memcached-or.html/a /pdiv class="blogger-post-footer"img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-2493719226427323488?l=coreygoldberg.blogspot.com' alt='' //div
Categories: Load & Perf Testing

Running Multi-Mechanize on RackSpace Cloud Servers with Ubuntu

Wed, 07/14/2010 - 14:25
p This post is about Multi-Mechanize, the web performance and load testing framework.br visit the project website: a href="http://multimechanize.com"multimechanize.com/a /p p Here are some instructions for getting started on rackspace cloud. These are also general instructions for anyone using a debian/ubuntu system. /p p There are _lots_ of options for running multi-mechanize in the cloud. You have choices between several cloud vendors and hosting/vps providers. Then you have a choice of operating system to deploy onto. I've found the combination of rackpsace cloud servers and ubuntu to be a really good choice. I see it as a great platform to run cloud-based load tests from (though hopefully they will offer other geographic regions at some point). It has been a breeze to work with multi-mechanize on this infrastructure. /p p So far i've been very impressed with rackspace. It lacks some of the functionality and management feature that EC2 gives you, but it is much easier to use. you pay by the hour + bandwidth used (starting at 1.5cents/hour). It's dead simple to deploy servers, and they have lots of linux operating systems to choose from. You can login to your account and provision the latest Ubuntu Server (9.10) in literally seconds. Need multiple servers? no prob. need _lots_ of servers? no prob, use the API's they provide. very slick stuff. /p p So... to get multi-mechanize working on rackspace's service... /p p create a rackspace account:br a href="http://www.rackspacecloud.com/cloud_hosting_products/servers"http://www.rackspacecloud.com/cloud_hosting_products/servers /a /p p login to your account:br a href="https://manage.rackspacecloud.com"https://manage.rackspacecloud.com/a /p p Deploy a new server from your account (choose the latest Ubuntu image). You can start with the minimum RAM allocation, and later resize your server to run large tests. Once you create your server, Rackspace will email you the server's ip address and root password. /p p Open a terminal window and ssh into your server using the info they supplied: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"gt;ssh lt;ip addressgt; -l root /pre p (enter password when prompted) /p p First, setup the dependencies for multi-mechanize.br run the following commands: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"gt;apt-get install -y python-mechanize gt;apt-get install -y python-matplotlib gt;apt-get install -y subversion /pre p Now you can grab the latest multi-mechanize trunk from subversion: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"gt;cd /opt gt;svn checkout http://multi-mechanize.googlecode.com/svn/trunk/ multi-mechanize /pre p Now go to your multi-mechanize directory and run a test: /p pre style="font-size:11px;border:1px #999999 dashed;font-family:monospace;color:#990000;background-color:#EEEEEE;padding-left:10px;"gt;cd /opt/multi-mechanize gt;python multi-mechanize.py default_project /pre p thats it... /pdiv class="blogger-post-footer"img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-5983545489832353473?l=coreygoldberg.blogspot.com' alt='' //div
Categories: Load & Perf Testing

6 Command Line Tools for Linux Performance Monitoring

Thu, 07/01/2010 - 09:22
p So you need to monitor a Linux system for performance metrics... CPU, Memory, Network, Disk, etc. /p p Here are 6 of my favorite command line tools for monitoring a Linux system from the command line. /p hr / stronghtop/strongbr / a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_k7-jvtv2cLo/TCy9tDdKYrI/AAAAAAAAArQ/ZYNCUDUwb8A/s1600/screenshot_htop.png"img style="cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://1.bp.blogspot.com/_k7-jvtv2cLo/TCy9tDdKYrI/AAAAAAAAArQ/ZYNCUDUwb8A/s400/screenshot_htop.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5488970627577176754" //a br / a href="http://htop.sourceforge.net/"http://htop.sourceforge.net//a hr / strongdstat/strongbr / a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_k7-jvtv2cLo/TCy9sgkjlGI/AAAAAAAAArI/iUDVIxjowz8/s1600/screenshot_dstat.png"img style="cursor:pointer; cursor:hand;width: 400px; height: 273px;" src="http://4.bp.blogspot.com/_k7-jvtv2cLo/TCy9sgkjlGI/AAAAAAAAArI/iUDVIxjowz8/s400/screenshot_dstat.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5488970618212947042" //a br / a href="http://dag.wieers.com/home-made/dstat/"http://dag.wieers.com/home-made/dstat//a hr / strongbmon/strongbr / a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_k7-jvtv2cLo/TCy9sPm4kHI/AAAAAAAAArA/YKmhbVGV1BU/s1600/screenshot_bmon.png"img style="cursor:pointer; cursor:hand;width: 400px; height: 359px;" src="http://3.bp.blogspot.com/_k7-jvtv2cLo/TCy9sPm4kHI/AAAAAAAAArA/YKmhbVGV1BU/s400/screenshot_bmon.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5488970613659308146" //a br / a href="http://freshmeat.net/projects/bmon/"http://freshmeat.net/projects/bmon//a hr / strongiftop/strongbr / a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_k7-jvtv2cLo/TCy9t47CtqI/AAAAAAAAArg/AL8khQaDGok/s1600/screenshot_iftop.png"img style="cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://4.bp.blogspot.com/_k7-jvtv2cLo/TCy9t47CtqI/AAAAAAAAArg/AL8khQaDGok/s400/screenshot_iftop.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5488970641929582242" //a br / a href="http://www.ex-parrot.com/pdw/iftop/"http://www.ex-parrot.com/pdw/iftop//a hr / strongifstat/strongbr / a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_k7-jvtv2cLo/TCy9tpw1eBI/AAAAAAAAArY/0JWtGr6_E2E/s1600/screenshot_ifstat.png"img style="cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://2.bp.blogspot.com/_k7-jvtv2cLo/TCy9tpw1eBI/AAAAAAAAArY/0JWtGr6_E2E/s400/screenshot_ifstat.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5488970637860239378" //a br / a href="http://gael.roualland.free.fr/ifstat/"http://gael.roualland.free.fr/ifstat//a hr / strongsysstat/strongbr / this is a package of utilites including strongiostat/strong, strongmpstat/strong, strongsar/strong, and others.br / a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_k7-jvtv2cLo/TCy95xUUBgI/AAAAAAAAAro/ZHzzRKH5dys/s1600/screenshot_iostat.png"img style="cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://2.bp.blogspot.com/_k7-jvtv2cLo/TCy95xUUBgI/AAAAAAAAAro/ZHzzRKH5dys/s400/screenshot_iostat.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5488970846046520834" //a br / a href="http://pagesperso-orange.fr/sebastien.godard/"http://pagesperso-orange.fr/sebastien.godard//a hr / p These tools are all available from package managers (apt-get, yum, etc) on most Linux systems. They are also available on most other *nix platforms. /pdiv class="blogger-post-footer"img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5236867476487043111-1588815434091547815?l=coreygoldberg.blogspot.com' alt='' //div
Categories: Load & Perf Testing