diff --git a/openerp/http.py b/openerp/http.py index 71678bf3aa8..5053d795b88 100644 --- a/openerp/http.py +++ b/openerp/http.py @@ -44,6 +44,7 @@ except ImportError: import openerp from openerp import SUPERUSER_ID +from openerp.service.server import memory_info from openerp.service import security, model as service_model from openerp.tools.func import lazy_property from openerp.tools import ustr @@ -95,7 +96,7 @@ def dispatch_rpc(service_name, method, params): start_time = time.time() start_rss, start_vms = 0, 0 if psutil: - start_rss, start_vms = psutil.Process(os.getpid()).get_memory_info() + start_rss, start_vms = memory_info(psutil.Process(os.getpid())) if rpc_request and rpc_response_flag: openerp.netsvc.log(rpc_request, logging.DEBUG, '%s.%s' % (service_name, method), replace_request_password(params)) @@ -117,7 +118,7 @@ def dispatch_rpc(service_name, method, params): end_time = time.time() end_rss, end_vms = 0, 0 if psutil: - end_rss, end_vms = psutil.Process(os.getpid()).get_memory_info() + end_rss, end_vms = memory_info(psutil.Process(os.getpid())) logline = '%s.%s time:%.3fs mem: %sk -> %sk (diff: %sk)' % (service_name, method, end_time - start_time, start_vms / 1024, end_vms / 1024, (end_vms - start_vms)/1024) if rpc_response_flag: openerp.netsvc.log(rpc_response, logging.DEBUG, logline, result) @@ -565,7 +566,7 @@ class JsonRequest(WebRequest): start_time = time.time() _, start_vms = 0, 0 if psutil: - _, start_vms = psutil.Process(os.getpid()).get_memory_info() + _, start_vms = memory_info(psutil.Process(os.getpid())) if rpc_request and rpc_response_flag: rpc_request.debug('%s: %s %s, %s', endpoint, model, method, pprint.pformat(args)) @@ -576,7 +577,7 @@ class JsonRequest(WebRequest): end_time = time.time() _, end_vms = 0, 0 if psutil: - _, end_vms = psutil.Process(os.getpid()).get_memory_info() + _, end_vms = memory_info(psutil.Process(os.getpid())) logline = '%s: %s %s: time:%.3fs mem: %sk -> %sk (diff: %sk)' % ( endpoint, model, method, end_time - start_time, start_vms / 1024, end_vms / 1024, (end_vms - start_vms)/1024) if rpc_response_flag: diff --git a/openerp/service/server.py b/openerp/service/server.py index fdd95a73ebf..300a04ec5d8 100644 --- a/openerp/service/server.py +++ b/openerp/service/server.py @@ -44,6 +44,11 @@ _logger = logging.getLogger(__name__) SLEEP_INTERVAL = 60 # 1 min +def memory_info(process): + """ psutil < 2.0 does not have memory_info, >= 3.0 does not have + get_memory_info """ + return (getattr(process, 'memory_info', None) or process.get_memory_info)() + #---------------------------------------------------------- # Werkzeug WSGI servers patched #---------------------------------------------------------- @@ -695,7 +700,7 @@ class Worker(object): _logger.info("Worker (%d) max request (%s) reached.", self.pid, self.request_count) self.alive = False # Reset the worker if it consumes too much memory (e.g. caused by a memory leak). - rss, vms = psutil.Process(os.getpid()).get_memory_info() + rss, vms = memory_info(psutil.Process(os.getpid())) if vms > config['limit_memory_soft']: _logger.info('Worker (%d) virtual memory limit (%s) reached.', self.pid, vms) self.alive = False # Commit suicide after the request. @@ -818,7 +823,7 @@ class WorkerCron(Worker): self.setproctitle(db_name) if rpc_request_flag: start_time = time.time() - start_rss, start_vms = psutil.Process(os.getpid()).get_memory_info() + start_rss, start_vms = memory_info(psutil.Process(os.getpid())) import openerp.addons.base as base base.ir.ir_cron.ir_cron._acquire_job(db_name) @@ -829,7 +834,7 @@ class WorkerCron(Worker): openerp.sql_db.close_db(db_name) if rpc_request_flag: run_time = time.time() - start_time - end_rss, end_vms = psutil.Process(os.getpid()).get_memory_info() + end_rss, end_vms = memory_info(psutil.Process(os.getpid())) vms_diff = (end_vms - start_vms) / 1024 logline = '%s time:%.3fs mem: %sk -> %sk (diff: %sk)' % \ (db_name, run_time, start_vms / 1024, end_vms / 1024, vms_diff)