I'll give that a try! Thanks you. On Wednesday, February 12, 2014 5:17:02 PM UTC-5, Michele Comitini wrote: > > run the profiler on the board: > > python web2py.py -F <profiles dir> > > make your app operate as usual. Do so for a limited amount of time since > the directory is going to be filled with profiling files. > > > move the profiling files to your desktop machine and analyze them all > together with runsnake (pip install runsnakerun). > That should help to find the exact spot where the load is. > > mic > > > > 2014-02-12 21:13 GMT+01:00 Michael Ellis <[email protected]<javascript:> > >: > >> I'm doing some embedded development with Web2py 2.8.2 on a BeagleBone >> Black (specs here) running a no-gui ubuntu. Mostly it's going very well so >> far, but I need some help reducing cpu usage for an ajax call that one of >> my pages is running every 2 seconds. >> >> A typical sample of the data returned is at the bottom of this post along >> with the code involved. The data length never exceeds about 1 kbyte. >> >> My problem is that when the page with the ajax call is being viewed, the >> cpu usage is averaging 25% as measured by top. If I make a second >> connection, the usage doubles to 50%, and so on. Obviously four users >> viewing the page will make the system unusable. The nature of the >> application is such that it would be rare to have more than one technician >> logged in, but it's certainly possible that several people might try to >> log in simultaneously, so I feel the performance does need to be addressed. >> >> I've already tried: >> >> Turning off migration >> Putting the ajax function in it's own controller and view >> >> Those actions got me from 30% to 25%. I've verified, by running the >> controller function in a standalone script, that the function itself only >> consumes about 1.5% cpu when called every 2 seconds. The view is trivial. >> It calls BEAUTIFY on the dict returned by the ajax function. Taking out the >> BEAUTIFY helper made no measure difference. I've also verified that the >> system is using less than 30% of available RAM. >> >> Web2py is serving the pages unencrypted through the board's ethernet >> adapter. FWIW, when I simultaneously run 'top -s2' over ssh to a terminal >> window the display shows that top itself and sshd together are using less >> than 2% of cpu to send a comparable amount of data at the same update rate >> (2 seconds) as my ajax call. >> >> Should I assume the rocket server is the culprit? I have apache >> available on the board but have no idea if it's worth the trouble to get it >> running and change the web2py config to use it. >> >> Can anyone suggest some further diagnostics? >> Thanks (as always!) >> Mike >> >> *Here's the part of the page view that calls the ajax:* >> <div id="statehouse_component"> >> </div> >> {{=LOAD(c='ajax', f='statehouse_poll.load', ajax=True, >> target="statehouse_component", >> user_signature=True, >> timeout=2000, times='infinity') }} >> >> *Here's the ajax view:* >> {{=BEAUTIFY(state)}} >> *The controller:* >> @auth.requires_login() >> def statehouse_poll(): """ Controller for monitor ajax polling page """ >> from statehouse_ajax import _statehouse_poll >> return _statehouse_poll() >> >> *and the function itself:* >> def _statehouse_poll(): >> >> """ Function for Monitor ajax """ >> import time >> import zmq >> from statehouse import STATEHOUSE_PORT >> context = zmq.Context() >> statehouse_socket = context.socket(zmq.REQ) >> >> statehouse_socket.connect("tcp://localhost:{}".format(STATEHOUSE_PORT)) >> statehouse_socket.send_json(dict(key='all', action='dump')) >> state = statehouse_socket.recv_json() >> >> for s in state.values(): >> for k in s.keys(): >> if k == 'timestamp': >> s[k] = time.asctime(time.localtime(s[k])) ## From >> unixtime to human readable string >> >> return dict(state=state) >> >> *and, finally, a sample of the data* >> >> {u'cbs': {u'vbattery2': 13.5, u'vbattery1': 13.5, u'timestamp': 'Wed Feb >> 12 19:00:27 2014', u'load_on': False, u'iload': 0.0, u'charging': True, >> u'icharge': 0.8}, u'annualtest': {u'status': u'inactive'}, u'standbytest': >> {u'status': u'completed', u'charger': u'pass', u'battery2': u'pass', >> u'battery1': u'pass', u'timestamp': 'Wed Feb 12 16:13:06 2014'}, u'cbscmd': >> {u'timestamp': 'Wed Feb 12 16:13:56 2014', u'charge': True, u'load_on': >> False}, u'monthlytest': {u'load': u'pass', u'status': u'completed', >> u'timestamp': 'Wed Feb 12 16:13:56 2014', u'switch': u'pass', u'battery1': >> u'pass', u'battery2': u'pass'}} >> >> >> -- >> Resources: >> - http://web2py.com >> - http://web2py.com/book (Documentation) >> - http://github.com/web2py/web2py (Source code) >> - https://code.google.com/p/web2py/issues/list (Report Issues) >> --- >> You received this message because you are subscribed to the Google Groups >> "web2py-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/groups/opt_out. >> > >
-- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.

