shell 脚本和snippets
shell 脚本和snippets
一些常用的shell 脚本和snippets。
持续更新中
shell functions
stderr
所有的错误信息都应该被导向STDERR。
1 | err() { |
java
获取java特定配置
由于 java -XshowSettings
的输出是stderr,不是stdout,在使用管道时要重定向。
1 | 标准错误的输出重定向到标准输出,&指示不要把1当作普通文件,而是fd=1即标准输出来处理 |
如果要查询其他属性,修改属性key即可
git
获取git 当前branch
1 | branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p') |
branch 校验
check the branch in the local repository
1 | # Ref: https://stackoverflow.com/questions/21151178/shell-script-to-check-if-specified-git-branch-exists |
check the branch in the remote repository
1 | # Ref: https://stackoverflow.com/questions/8223906/how-to-check-if-remote-branch-exists-on-a-given-remote-repository |
top
top执行一次
1 | # top 执行一次,并打印 程序列表 |
top 统计使用内存
在docker中统计内存使用free -m
常常不准确。可以使用TOP查看内存使用。
- 输入top命令,按下
e
选择size单位。 - 按下
shift+w
保存配置到~/.toprc
1 | # numfmt 可以转换带单位的数字。 |
net
获取tcp 连接统计
1 | uname | grep Darwin -q && option_for_mac="-ptcp" |
scripts
show-busy-java-threads
用于快速排查Java的CPU性能问题(top us值过高),自动查出运行的Java进程中消耗CPU多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用。
目前只支持Linux。原因是Mac、Windows的ps命令不支持列出进程的线程id.
脚本思路:
- top命令找出消耗CPU高的Java进程及其线程id:
- 开启线程显示模式(top -H,或是打开top后按H)
- 按CPU使用率排序(top缺省是按CPU使用降序,已经合要求;打开top后按P可以显式指定按CPU使用降序)
- 记下Java进程id及其CPU高的线程id
- 查看消耗CPU高的线程栈:
- 用进程id作为参数,jstack出有问题的Java进程
- 手动转换线程id成十六进制(可以用printf %x 1234)
- 在jstack输出中查找十六进制的线程id(可以用vim的查找功能/0x1234,或是grep 0x1234 -A 20)
- 查看对应的线程栈,分析问题