[
https://issues.apache.org/jira/browse/AMBARI-24758?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16647649#comment-16647649
]
Hudson commented on AMBARI-24758:
---------------------------------
SUCCESS: Integrated in Jenkins build Ambari-trunk-Commit #10206 (See
[https://builds.apache.org/job/Ambari-trunk-Commit/10206/])
AMBARI-24758. Ambari-agent takes up too many cpu of perf (aonishuk) (aonishuk:
[https://gitbox.apache.org/repos/asf?p=ambari.git&a=commit&h=9103295a7a8a8da3efe0f1b96cf6d915bb8cbb1d])
* (edit) ambari-agent/src/main/python/ambari_agent/Facter.py
* (edit) ambari-agent/src/main/python/ambari_agent/HostCheckReportFileHandler.py
* (edit) ambari-agent/src/main/python/ambari_agent/HostInfo.py
* (edit) ambari-agent/src/main/python/ambari_agent/alerts/base_alert.py
* (edit) ambari-agent/src/main/python/ambari_agent/AmbariAgent.py
* (edit) ambari-agent/src/main/python/ambari_agent/alerts/ams_alert.py
* (edit) ambari-agent/src/main/python/ambari_agent/alerts/metric_alert.py
* (edit) ambari-agent/src/main/python/ambari_agent/HostCleanup.py
* (edit) ambari-agent/src/main/python/ambari_agent/main.py
* (edit) ambari-agent/src/main/python/ambari_agent/alerts/script_alert.py
> Ambari-agent takes up too many cpu on perf
> ------------------------------------------
>
> Key: AMBARI-24758
> URL: https://issues.apache.org/jira/browse/AMBARI-24758
> Project: Ambari
> Issue Type: Bug
> Reporter: Andrew Onischuk
> Assignee: Andrew Onischuk
> Priority: Major
> Labels: pull-request-available
> Fix For: 2.8.0
>
> Attachments: AMBARI-24758.patch
>
> Time Spent: 1h 10m
> Remaining Estimate: 0h
>
> ncalls tottime percall cumtime percall filename:lineno(function)
> 14129 1426.122 0.101 1426.122 0.101 {time.sleep}
> 1 0.337 0.337 1426.769 1426.769 main.py:358(run_threads)
> 331 0.219 0.001 0.219 0.001 {method 'acquire' of
> 'thread.lock' objects}
> 11 0.181 0.016 0.181 0.016 {built-in method poll}
> 1 0.108 0.108 0.108 0.108 {method 'do_handshake' of
> '_ssl._SSLSocket' objects}
> 14151 0.042 0.000 0.042 0.000 threading.py:571(isSet)
> 125 0.028 0.000 0.028 0.000 {method 'flush' of 'file'
> objects}
> 5078 0.027 0.000 0.052 0.000 decoder.py:65(py_scanstring)
> 15 0.020 0.001 0.020 0.001 {posix.read}
> 5093 0.020 0.000 0.024 0.000 {method 'sub' of
> '_sre.SRE_Pattern' objects}
> 1 0.019 0.019 0.019 0.019 {method 'connect' of
> '_socket.socket' objects}
> 15365 0.018 0.000 0.018 0.000 {method 'match' of
> '_sre.SRE_Pattern' objects}
> 55424/13131 0.016 0.000 0.057 0.000
> encoder.py:332(_iterencode_dict)
> 38241 0.014 0.000 0.014 0.000 {isinstance}
> 21 0.013 0.001 0.022 0.001 collections.py:282(namedtuple)
> 473/5 0.012 0.000 0.073 0.015 decoder.py:148(JSONObject)
> 5078 0.009 0.000 0.034 0.000
> encoder.py:43(py_encode_basestring_ascii)
> 5 0.006 0.001 0.070 0.014 __init__.py:122(dump)
> 13251 0.005 0.000 0.005 0.000 {method 'write' of 'file'
> objects}
> 7 0.004 0.001 0.004 0.001
> {ambari_commons.libs.x86_64._posixsubprocess.fork_exec}
> 5638 0.004 0.000 0.004 0.000 encoder.py:49(replace)
> 3167/5 0.003 0.000 0.073 0.015 scanner.py:27(_scan_once)
> 13353/9909 0.003 0.000 0.030 0.000
> encoder.py:279(_iterencode_list)
> 75 0.003 0.000 0.003 0.000 {method 'read' of
> '_ssl._SSLSocket' objects}
> 3177/8 0.003 0.000 0.008 0.001 Utils.py:124(make_immutable)
> 13131 0.003 0.000 0.060 0.000 encoder.py:409(_iterencode)
> 11128 0.003 0.000 0.003 0.000 {method 'groups' of
> '_sre.SRE_Match' objects}
> 2202/45 0.003 0.000 0.004 0.000 Utils.py:135(get_mutable_copy)
> 474/10 0.002 0.000 0.008 0.001 Utils.py:170(__init__)
> 238 0.002 0.000 0.002 0.000 {time.localtime}
> 119 0.002 0.000 0.004 0.000 __init__.py:242(__init__)
> 3759 0.002 0.000 0.002 0.000 {method 'isalnum' of 'str'
> objects}
> 14752 0.002 0.000 0.002 0.000 {method 'end' of
> '_sre.SRE_Match' objects}
> 16854 0.002 0.000 0.002 0.000 {method 'append' of 'list'
> objects}
> 5098 0.002 0.000 0.002 0.000 {method 'join' of 'unicode'
> objects}
> 238 0.002 0.000 0.007 0.000 __init__.py:451(format)
> 13 0.002 0.000 0.004 0.000 metric_alert.py:286(__init__)
> 7 0.001 0.000 0.026 0.004
> subprocess32.py:1153(_execute_child)
> 41 0.001 0.000 0.001 0.000 {open}
> 616 0.001 0.000 0.001 0.000 {method 'format' of 'str'
> objects}
> 238 0.001 0.000 0.004 0.000 __init__.py:404(formatTime)
> 18 0.001 0.000 0.001 0.000 {posix.listdir}
> 5 0.001 0.000 0.072 0.014
> ClusterCache.py:131(persist_cache)
> 4032 0.001 0.000 0.003 0.000 collections.py:323(<genexpr>)
> 18 0.001 0.000 0.001 0.000 {method 'sort' of 'list'
> objects}
> 90 0.001 0.000 0.001 0.000 {built-in method now}
> 238 0.001 0.000 0.001 0.000 {time.strftime}
> 119 0.001 0.000 0.001 0.000 __init__.py:1215(findCaller)
> 5706 0.001 0.000 0.001 0.000 {method 'group' of
> '_sre.SRE_Match' objects}
> 281 0.001 0.000 0.001 0.000 threading.py:146(acquire)
> 281 0.001 0.000 0.001 0.000 threading.py:186(release)
> 119 0.001 0.000 0.001 0.000 {method 'seek' of 'file'
> objects}
> 1 0.001 0.001 0.001 0.001
> ClusterTopologyCache.py:58(on_cache_update)
> 119 0.001 0.000 0.005 0.000 handlers.py:144(shouldRollover)
> 50/5 0.001 0.000 0.035 0.007 decoder.py:223(JSONArray)
> Major cpu cosumers:
> 1) Regexp operation:
> As we can see a lot of time is took for regexp operations. This happens
> because we use non-compiled regular expressions.
> 2) Json operations:
> Another major cpu consumer is json module, because _speedups.so is not
> compiled for python2.7 currently. We have this situation. This is tackled by
> other issue
> 3) Main thread waking up/sleeping too often.
> This seems to create quite a bit cpu usage.
> The approach was implemented so agent can check for SIGTERM (ambari-agent
> stop). A proper solution should be a usage signal.pause() instead of
> sleep/wakeup.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)