[ https://issues.apache.org/jira/browse/KNOX-2954?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
liang.feng updated KNOX-2954: ----------------------------- Summary: Gateway service metric name contain hbase rowkey led to frequently full gc (was: Gateway name of service metric contain hbase rowkey led to frequently full gc) > 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 > 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 > > > 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 > !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(), its value is /hbase/demo/row9. When > building a service metric name, the parameter of the calling > InstrUtils.getServiceResourcePath function is RequestLine.getUri(), its 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)