arthas icon indicating copy to clipboard operation
arthas copied to clipboard

improve search limit(-n) for sc and sm

Open qxo opened this issue 4 years ago • 14 comments

主分支中4a48a7b0增加了numberOfLimit,但没实现原PR: #1291 主旨:尽快响应用户请求,避免误操作产生较大CPU和内存消耗

之前numberOfLimit的功能是查询处理结束后,再给出用户已提示这样做实际意义不大。

要做到fail-fast:应该是重构search内部实现,当匹配到目标限制时直接退出,列出结果。

当匹配结果>=numberOfLimit时给出提示

qxo avatar Aug 16 '20 04:08 qxo

下面两个场景会产生较多内存碎片: 1)sc -d 查询类详细信息,每个类需要创建一个vo 2)sm 每个方法会创建一个vo

而对于 sc 查询结果数量很多也不会产生大量内存碎片,只是一个size很大的List<String>列表,也不会新增String对象,不需要限制。 有时需要使用组合命令查询过滤,限制数量会导致这种方式不能用了。

kylixs avatar Aug 16 '20 04:08 kylixs

下面两个场景会产生较多内存碎片: 1)sc -d 查询类详细信息,每个类需要创建一个vo 2)sm 每个方法会创建一个vo

而对于 sc 查询结果数量很多也不会产生大量内存碎片,只是一个size很大的List列表,也不会新增String对象,不需要限制。 有时需要使用组合命令查询过滤,限制数量会导致这种方式不能用了。

就算不会占用太多CPU和内存,但让CPU做无用功总是事实:假设有10万个符合要求的类,实际只要显示100就够了:那为什么我们先找出这所有10万个,然后我们只显示其中的100个?

原来SearchUtils内部的filter实现也是这样:先找匹配的再过滤,一次性匹配过滤所要的不是更直接:)

we can do better,why not ?

qxo avatar Aug 16 '20 05:08 qxo

请修改一下代码,满足下面的要求。 只限制下面两个场景的类匹配数量: 1)sc -d class-pattern 查询类详细信息 2)sm class-pattern [method-pattern] [-d] 查询方法

下面的不能限制: 1)sc class-pattern 查询类名

kylixs avatar Aug 17 '20 09:08 kylixs

why? 这里应该有个解释...

还是出于你们某位领导的一个执念...

------------------ 原始邮件 ------------------ 发件人: "gongdewei"<[email protected]>; 发送时间: 2020年8月17日(星期一) 下午5:42 收件人: "alibaba/arthas"<[email protected]>; 抄送: "qxo"<[email protected]>; "Author"<[email protected]>; 主题: Re: [alibaba/arthas] improve search limit(-n) for sc and sm (#1438)

请修改一下代码,满足下面的要求。 只限制下面两个场景的类匹配数量: 1)sc -d class-pattern 查询类详细信息 2)sm class-pattern [method-pattern] [-d] 查询方法

下面的不能限制: 1)sc class-pattern 查询类名

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

qxo avatar Aug 17 '20 09:08 qxo

不能影响这种组合命令的使用: sc *List | wc -l

kylixs avatar Aug 17 '20 10:08 kylixs

不能影响这种组合命令的使用: sc *List | wc -l

已支持,请看提交日志:)

qxo avatar Aug 17 '20 10:08 qxo

这是不是sm不-n就无效了!!!

我只想让工具功能更强... 你这么执着于你原来逻辑...那随你吧... 你想缩小原PR的能力,我保留意见,自己改吧:)

------------------ 原始邮件 ------------------ 发件人: "gongdewei"<[email protected]>; 发送时间: 2020年8月18日(星期二) 下午2:18 收件人: "alibaba/arthas"<[email protected]>; 抄送: "qxo"<[email protected]>; "Author"<[email protected]>; 主题: Re: [alibaba/arthas] improve search limit(-n) for sc and sm (#1438)

@kylixs commented on this pull request.

In core/src/main/java/com/taobao/arthas/core/command/klass100/SearchClassCommand.java: > @@ -96,7 +107,8 @@ public void process(final CommandProcess process) { // TODO: null check RowAffect affect = new RowAffect(); Instrumentation inst = process.session().getInstrumentation(); - List<Class<?>> matchedClasses = new ArrayList<Class<?>>(SearchUtils.searchClass(inst, classPattern, isRegEx, hashCode)); + numberOfLimit = prepareLimit(isDetail, numberOfLimit);
这些逻辑不要搞得这么复杂,简单处理就好。 if (isDetail) { int limit = (numberOfLimit > 0)?numberOfLimit+1 : limit; Set<Class<?>> matchedClasses = SearchUtils.searchClass(inst, classPattern, isRegEx, hashCode, limit); if (numberOfLimit > 0 && matchedClasses.size() > numberOfLimit) { process.end(-1, "xxxx"); return; } ... } else { List<Class<?>> matchedClasses = new ArrayList<Class<?>>(SearchUtils.searchClass(inst, classPattern, isRegEx, hashCode, -1)); .... }
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

qxo avatar Aug 18 '20 06:08 qxo

这是不是sm不-n就无效了!!!

sm -n 200sm -n -1 都有效

kylixs avatar Aug 18 '20 06:08 kylixs

? 怎么个无效 ? 我认为git提交日志已解释清楚了...

    feat: 尊重PR审核方意见改进了numberOfLimit默认值逻辑
    
    1. 当isDetail=true时, 如numberOfLimit>100 或 numberOfLimit<=0, 则强制使用默认值
    即改为numberOfLimit只对detail模式生效,默认值为SEARCH_DETAIL_DEFAULT_LIMIT
    
    2. 当isDetail=false, 默认不限制(以便管道指令结果符合预期): 保持`sc *List | wc -l`逻辑一致;
       当isDetail=false,如numberOfLimit用户指定的numberOfLimit<0, 表示不限制;numberOfLimit=0表示采用默认限制(100)

如果需要默认限制sm结果 ,则只改一下SearchMethodCommand初始值numberOfLimit=0即可。 我的最后一次提交(c0a7ba88)后有什么遗漏,欢迎指正:)

口说无凭,有什么问题请用数据说话吧(还好这两天休假不然还顾不上) 试过了,sm -n 200&nbsp; * * sm -n -1 *List *是可以使用的。 由于sm目前限制也只是类名,返回会超过200

------------------ 原始邮件 ------------------ 发件人: "gongdewei"<[email protected]>; 发送时间: 2020年8月18日(星期二) 下午2:28 收件人: "alibaba/arthas"<[email protected]>; 抄送: "qxo"<[email protected]>; "Author"<[email protected]>; 主题: Re: [alibaba/arthas] improve search limit(-n) for sc and sm (#1438)

这是不是sm不-n就无效了!!!

sm -n 200 和 sm -n -1 都有效

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

qxo avatar Aug 18 '20 07:08 qxo

@qxo 我来处理下这个pr,现在还有 conflicts,麻烦你再更新下?

hengyunabc avatar Aug 18 '20 07:08 hengyunabc

ok:)

我先把此PR和主分区同步检一下先:)

------------------ 原始邮件 ------------------ 发件人: "hengyunabc"<[email protected]>; 发送时间: 2020年8月18日(星期二) 下午4:00 收件人: "alibaba/arthas"<[email protected]>; 抄送: "qxo"<[email protected]>; "Mention"<[email protected]>; 主题: Re: [alibaba/arthas] improve search limit(-n) for sc and sm (#1438)

@qxo 我来处理下这个pr,现在还有 conflicts,麻烦你再更新下?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

qxo avatar Aug 18 '20 08:08 qxo

@hengyunabc 我已重新处理过了:基于最新主分支然后重新git cherry-pick此PR, 请审查代码:)

欢迎指正:)

qxo avatar Aug 18 '20 08:08 qxo

另外[原PR](https://github.com/alibaba/arthas/pull/1291/files) sm是-n参数是限制方法个名的,本PR重新合并时没加个功能:也就是说此PR当前逻辑sm还只是限制类的个数的, 这个你们看一下:要或不要改

qxo avatar Aug 18 '20 08:08 qxo

CLA assistant check
All committers have signed the CLA.

CLAassistant avatar Jan 26 '22 02:01 CLAassistant