[ https://issues.apache.org/jira/browse/KNOX-2954?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sandor Molnar updated KNOX-2954: -------------------------------- Fix Version/s: 2.1.0 Resolution: Fixed Status: Resolved (was: Patch Available) > Gateway service metric name contain hbase rowkey led to frequently full gc > -------------------------------------------------------------------------- > > Key: KNOX-2954 > URL: https://issues.apache.org/jira/browse/KNOX-2954 > Project: Apache Knox > Issue Type: Bug > Components: Metrics, Server > Reporter: liang.feng > Priority: Critical > Fix For: 2.1.0 > > Attachments: image-2023-09-01-16-40-35-876.png, > image-2023-09-01-16-49-57-346.png, image-2023-09-01-16-55-30-378.png, > image-2023-09-01-17-37-51-597.png, mat_heap_leak_suspects_result.png > > Time Spent: 50m > Remaining Estimate: 0h > > Our Gateway Server frequently full gc in a few days. I dumped jvm heap and > analyzed dump file with mat tool. I found some leak suspects about jmx > metric, These leaks occurs in class > org.apache.knox.gateway.services.metrics.impl.DefaultMetricsService. > This is the analysis result generated by MAT > !mat_heap_leak_suspects_result.png! > > This is detail of problem Suspect 3 > !image-2023-09-01-16-40-35-876.png! > > I found that many metrics which starting with service contain hbase rowkey by > using visualVM tool. These metrics were generted when I used get api to query > data from hbase. I think that name of service metric should not contain > rowkey. > > This is an example of metric name, the query command is > {code:java} > curl -ik -u xx:xx \ > -H "Accept: text/xml" \ > -X GET \ > 'https://localhost:8443/gateway/sandbox/hbase/demo/row[1-9]' {code} > !image-2023-09-01-16-55-30-378.png! > > The reason for this problem is that client and service metric both call the > InstrUtils.getServiceResourcePath function to get resource path , but the > parameters they use are different when build metric name. Suppose the request > url is [https://localhost:8443/gateway/sandbox/hbase/demo/row9. > |https://bd-hbase-dev02.zeus.lianjia.com:8443/gateway/sandbox/hbase/demo/row9]When > building a client metric name, the parameter of the calling > InstrUtils.getServiceResourcePath function is > httpServletRequest.getPathInfo(), httpServletRequest.getPathInfo() value is > /hbase/demo/row9. When building a service metric name, the parameter of the > calling InstrUtils.getServiceResourcePath function is RequestLine.getUri(), > RequestLine.getUri() value is /demo/row9. The purpose of > InstrUtils.getServiceResourcePath is to obtain the first two elements of > path. So service metric name contains rowkey. > I think that we should only obtain the first elements of path, when building > service metric name. > The effect after applying the [pr791|https://github.com/apache/knox/pull/791] > !image-2023-09-01-17-37-51-597.png! > > > > > > > -- This message was sent by Atlassian Jira (v8.20.10#820010)