You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@knox.apache.org by "liang.feng (Jira)" <ji...@apache.org> on 2023/09/01 09:39:00 UTC
[jira] [Created] (KNOX-2954) Gateway metric name of service contain hbase rowkey led to full gc
liang.feng created KNOX-2954:
--------------------------------
Summary: Gateway metric name of service contain hbase rowkey led to 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
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 The leak 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 ,
!image-2023-09-01-17-37-51-597.png!
--
This message was sent by Atlassian Jira
(v8.20.10#820010)