Hello, Apologies if this post is off topic.
We have a Python application that polls directories using threads and inotify watchers. We have always run this application in a cloud server provided by Voxel (http://www.voxel.net). We are currently testing a different cloud server provider StormOnDemand (http://stormondemand.com) and when we ran our application, our load averages were a lot higher then they were when they were running on the Voxel cloud server despite the specs being about the same (Refer below for more details on setup). We have also ensured then when testing the server was not handling any other loads. I have written a simple test application (test_threads.py - attached, or refer to http://pastebin.com/xGQU7JD0) that simulates the issues we are seeing by starting up threads that loops, sleeping for a user defined time on each loop. It takes 2 parameters, the amount of threads to start and the interval period. When I run, "python test_threads.py 50 0.1" for about 10 minutes Load average results: StormOnDemand: $ uptime 18:46:22 up 7:29, 6 users, load average: 4.43, 4.16, 2.93 voxel.net $ uptime 18:48:14 up 9 days, 15:09, 9 users, load average: 0.51, 0.47, 0.43 The load average on the StormOnDemand server is a lot higher. Python version: StormOnDemand - 2.6.5 Voxel - 2.6.5 Server spec: StormOnDemand - 8 x Intel(R) Xeon(R) CPU E5506 @ 2.13GHz; 16GB RAM; 230GB HDD (Storm Bare Metal servers) Voxel - 7 x Intel(R) Xeon(R) CPU L5640 @ 2.27GHz; 14GB RAM; 200GB HDD (VoxCloud servers) OS: StormOnDemand - Ubuntu 10.04 - 2.6.36-rc8101910 #1 SMP Tue Oct 19 19:18:34 UTC 2010 x86_64 GNU/Linux Voxel - Ubuntu 10.04 - 2.6.32-31-server #61-Ubuntu SMP Fri Apr 8 19:44:42 UTC 2011 x86_64 GNU/Linux Virtualisation method: StormOnDemand - Not 100% sure, but I think they use Xen Voxel - Not sure, but the image that we are using looks to us like a stock standard Ubuntu 10.04 server Any suggestion on why the load would be a lot higher or how I could debug this further is greatly appreciated. -- Mohan
#Simple script to test load when running python threads # usage: # python test_threads.py <number of threads> <thread loop interval> # e.g. : # python test_threads.py 50 0.1 # import sys from threading import Lock, Thread import logging import time logging.basicConfig() log = logging.getLogger("test") log.setLevel(logging.DEBUG) class MonitorDir(Thread): def __init__(self, id, interval): super(MonitorDir, self).__init__() self.interval = interval self.id = id self._terminated = False def finish(self): if not self._terminated: log.info('Terminating... %i'%self.id) self._terminated = True def run(self): print 'Start threadi %i'%self.id try: while not self._terminated: log.info('in id - %i \n'%self.id) time.sleep(self.interval) except: log.exception('Unexpected error while monitoring') finally: log.info('Done monitoring') if __name__ == '__main__': mThreads = [] for i in range(int(sys.argv[1])): print "create thread %i"%i mThread = MonitorDir(i, float(sys.argv[2])) mThreads.append(mThread) mThread.start() while any(x.isAlive() for x in mThreads): try: time.sleep(1) except KeyboardInterrupt: log.debug('Exiting...') break else: sys.exit(1) for mThread in mThreads: mThread.finish() for mThread in mThreads: mThread.join() sys.exit(0)
-- http://mail.python.org/mailman/listinfo/python-list