2

开始积累自己的工具库

 3 years ago
source link: https://qcrao.com/2021/07/21/start-to-build-up-personal-tools/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

不知道你有没有这样的经验:看了很多计算机相关的书,觉得自己懂得很多,但是一遇到实际问题,就不会解。

再看身边的老司机,执行几行命令,看了几个指标,就准确地定位问题了。他可能也没看那么多理论,但实战能力确实强,心里一下子就失衡了。

这其中有很多原因,我认为其中有一个比较重要的就是:工具的使用。老司机因为经验多,积累了很多 命令、shell 脚本、代码库……这些东西就像瑞士军刀,关键时刻,直接就可以派上大用场。在线上出问题的时候,云淡风轻地说,这行代码有问题,删掉就可以了。潇洒至极!

今天我就把我最近积累的一些工具,包括一些软件、命令,这些是可以直接用于实战的。希望看完之后,能提升你的战斗力。

今天推荐 2 个我日常用得比较多的,提升效率的软件:aText、paste。

aText

aText 是一个输入映射的软件,输入预先设定的字符串,就可以转成设定好的目标字符串。我用 aText 存了很多有用的映射,例如,我把打开博客文章的命令缩写成了 XPosts

因为博客文件所在的路径比较长,如果我每次都直接敲出完整路径的话,会很麻烦。有了这个映射后,只用输入 XPosts 就自动变成了我要的文件路径。

还有很多场景可以使用 aText,尤其是你经常要输入的相同的内容,非常方便。

paste

paste 管理剪贴版的历史,只要是你复制过的内容,它都会保存下来,甚至可以对文本内容进行搜索。

比如可以把开发、排查问题时常用的链接、命令都放到一个 tab 下面,要用的时候,直接快捷键调出,怎一个优雅了得。

这部分挑了一些非常有用的命令出来,大家可以记在笔记里,关键时候直接拿出来用。

查看 cache size

看 Go 源码的时候,经常能看到一些 pad 字段,这个字段主要是用来防止 false sharing,一般是根据 cache line size 来算 pad 大小的。那么查看这个 size 的大小呢?

getconf LEVEL1_DCACHE_LINESIZE

查看内核版本

有时候会遇到一些和内核版本相关的问题,例如 Go 语言里面的内存归还策略在 Go 1.12 有一个改动,将 MADV_FREE 改成了 MADV_DONTNEED,导致线上应⽤的 RSS ⼤幅上升。

使用 MADV_FREE 方式,程序内存不会立刻回收,即 RSS 值不会立刻下降,只有当 OS 内存紧缺时才会回收 Go 程序的内存;

而 Go 1.11 以及之前的版本默认采用的是 MADV_DONTNEED 方式,程序 RSS 值下降很快。

因此如果需要使程序内存占用下降很慢的话,可设置环境变量 GODEBUG=madvdontneed=1

另外,MADV_FREE 只在 Linux 4.5 及之后的版本才有,所以当你遇到 RSS 一直降不下去的场景时,要想确认是不是这个问题导致的,还得看你的内核版本是啥。那就用这个命令:

uname -a

这个归还内存的策略在 Go 1.16 又改回去了。因此只有在 Go 1.12-Go 1.15 之间,且是 Linux 4.5 及之后的内核版本才会有这个问题。

输出代码行号

有时候需要用 cat 命令输出一段代码,截图发给别人。这时如果需要对着代码行号做一些说明的话,把代码行号一并输出来是非常 nice 的,只需要用这个命令:

cat -n a.go

汇总展示代码构成

当我们想看一个开源项目的代码行数的时候,并且能看到各种类型的语言各占多少的时候,怎么办呢?一个命令搞定:

tokei ./

就问你强不强!

这个用在什么场景呢?太多了,例如你准备看一个稍微简单一点的框架,有几个侯选的:chi, echo, gin……执行一下命令,看看代码行数,选择一个最少的。

工具是很重要的,积累了很多前人的智慧,我们拿来直接用,不需要自己再从零开始。当然,适当地学习原理也是必须的。

我们要记住这些命令,存入自己的工具库,要用的时候直接调出来。它们可以节省我们大脑的内存,把宝贵的资源用在思考真正的问题上,而不是记住这些命令。

而且当我们有了自己的代码码、脚本库、工具库的时候,遇到问题,拿上相应的家伙上场,马上就可以得到很多相关的信息,我们再根据这些信息做决策。

今天就先列这些吧,其实还准备了好几个关于 Go 的,先不放出来。如果这篇比较受欢迎,就下期再写了。

最后,也欢迎在留言区分享你的工具,无论是软件,还是一行命令。我会汇总后再分享给大家,切实有效地提升大家的能力。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK