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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to