[
https://issues.apache.org/jira/browse/HADOOP-11301?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14224164#comment-14224164
]
stack commented on HADOOP-11301:
--------------------------------
I tried the patch and it seems like it is doing as expected, [~maysamyabandeh].
My test is basic. I just invoke the /jmx page in the UI. Before the patch,
with this simple logging inserted:
{code}
@@ -175,7 +175,9 @@ private void updateJmxCache() {
synchronized(this) {
int oldCacheSize = attrCache.size();
int newCacheSize = updateAttrCache();
+ LOG.info("Called updateAttrCache");
if (oldCacheSize < newCacheSize) {
+ LOG.info("Called updateInfoCache");
updateInfoCache();
}
jmxCacheTS = Time.now();
{code}
... I would see this output on each request in unpatched case.
{code}
2014-11-24 22:44:41,688 INFO [1851255134@qtp-1525844775-1]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 22:44:41,689 INFO [1851255134@qtp-1525844775-1]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 22:44:41,693 INFO [1851255134@qtp-1525844775-1]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 22:44:41,694 INFO [1851255134@qtp-1525844775-1]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 22:44:41,694 INFO [1851255134@qtp-1525844775-1]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 22:44:41,694 INFO [1851255134@qtp-1525844775-1]
impl.MetricsSourceAdapter: Called updateInfoCache
2014-11-24 22:44:41,696 INFO [1851255134@qtp-1525844775-1]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 22:44:41,699 INFO [1851255134@qtp-1525844775-1]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 22:44:41,699 INFO [1851255134@qtp-1525844775-1]
impl.MetricsSourceAdapter: Called updateInfoCache
2014-11-24 22:44:41,699 INFO [1851255134@qtp-1525844775-1]
impl.MetricsSourceAdapter: Called updateAttrCache
{code}
I then applied the patch plus logging and would get this output on each page
invocation:
{code}
2014-11-24 23:20:49,145 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 23:20:49,145 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateInfoCache
2014-11-24 23:20:49,146 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 23:20:49,146 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateInfoCache
2014-11-24 23:20:49,154 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 23:20:49,154 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateInfoCache
2014-11-24 23:20:49,155 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 23:20:49,156 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateInfoCache
2014-11-24 23:20:49,157 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 23:20:49,157 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateInfoCache
2014-11-24 23:20:49,193 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 23:20:49,193 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateInfoCache
2014-11-24 23:20:49,203 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 23:20:49,203 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateInfoCache
2014-11-24 23:20:49,203 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateAttrCache
2014-11-24 23:20:49,203 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateInfoCache
{code}
Its same amount of updateAttrCache updates but we are now doing a call to
updateInfoCache for each updateAttrCache call. Thats as expected I believe.
I was thinking that we were refreshing attrs and the bean on each invocation
but added this:
{code}
@@ -163,6 +163,7 @@ private void updateJmxCache() {
}
}
else {
+ LOG.info("Returned w/o updateAttrCache");
return;
}
}
{code}
... and then see this:
{code}
2014-11-24 23:45:22,002 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,002 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,002 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,002 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,002 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,002 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateAttrCache ttl=11, all=true
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateInfoCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,005 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Returned w/o updateAttrCache
2014-11-24 23:45:22,047 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateAttrCache ttl=11, all=true
2014-11-24 23:45:22,047 INFO [2113243119@qtp-1525844775-0]
impl.MetricsSourceAdapter: Called updateInfoCache
...
{code}
So we are using cached data sometimes. Default says use cache for ten seconds.
That is not what I see above ('11'?). I should look at this more.
> [optionally] update jmx cache to drop old metrics
> -------------------------------------------------
>
> Key: HADOOP-11301
> URL: https://issues.apache.org/jira/browse/HADOOP-11301
> Project: Hadoop Common
> Issue Type: Improvement
> Reporter: Maysam Yabandeh
> Assignee: Maysam Yabandeh
> Attachments: HADOOP-11301.v01.patch, HADOOP-11301.v02.patch,
> HADOOP-11301.v03.patch, HADOOP-11301.v04.patch
>
>
> MetricsSourceAdapter::updateJmxCache() skips updating the info cache if no
> new metric is added since last time:
> {code}
> int oldCacheSize = attrCache.size();
> int newCacheSize = updateAttrCache();
> if (oldCacheSize < newCacheSize) {
> updateInfoCache();
> }
> {code}
> This behavior is not desirable in some applications. For example nntop
> (HDFS-6982) reports the top users via jmx. The list is updated after each
> report. The previously reported top users hence should be removed from the
> cache upon each report request.
> In our production run of nntop we made a change to ignore the size check and
> always perform updateInfoCache. I am planning to submit a patch including
> this change. The feature can be enabled by a configuration parameter.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)