问题:我经常需要查看特定日志最后一天内最常重复的"模式".就像这里的一小部分tomcat日志一样:
GET /app1/public/pkg_e/v3/555413242345562/account/stats 401 954 5
GET /app1/public/pkg_e/v3/555412562561928/account/stats 200 954 97
GET /app1/secure/pkg_e/v3/555416251626403/ex/items/ 200 517 18
GET /app1/secure/pkg_e/v3/555412564516032/ex/cycle/items 200 32839 50
DELETE /app1/internal/pkg_e/v3/accounts/555411543532089/devices/bbbbbbbb-cccc-2000-dddd-43a8eabcdaa0 404 - 1
GET /app1/secure/pkg_e/v3/555412465246556/sessions 200 947 40
GET /app1/public/pkg_e/v3/555416264256223/account/stats 401 954 4
GET /app2/provisioning/v3/555412562561928/devices 200 1643 65
...
Run Code Online (Sandbox Code Playgroud)
如果我想找出最常用的URL(以及方法和重新编码) - 我会这样做:
[root@srv112:~]$ N=6;cat test|awk '{print $1" "$2" ("$3")"}'\
|sed 's/[0-9a-f-]\+ (/%GUID% (/;s/\/[0-9]\{4,\}\//\/%USERNAME%\//'\
|sort|uniq -c|sort -rn|head -$N
4 GET /app1/public/pkg_e/v3/%USERNAME%/account/stats (401)
2 GET /app1/secure/pkg_e/v3/%USERNAME%/devices (200)
2 GET /app1/public/pkg_e/v3/%USERNAME%/account/stats (200)
2 DELETE /app1/internal/pkg_e/v3/accounts/%USERNAME%/devices/%GUID% (404)
1 POST /app2/servlet/handler …Run Code Online (Sandbox Code Playgroud) 其中一个遗留系统升级到bash4,其大部分脚本停止工作.我已经将它缩小到如何在a中扩展花括号<(cmdA ...|cmdB ... file{1,2}|cmdZ ...).
为了更好地说明差异:
之前(bash 3.2.25):
[root@host1:~]$ bash -version|head -1
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
[root@host1:~]$ cat <(echo sort file{1,2})
sort file1
sort file2
[root@host1:~]$ join <(sed 's/\r//g;s/^[^:]*://' file{1,2}|LANG=C sort)
[root@host1:~]$
Run Code Online (Sandbox Code Playgroud)
之后(bash 4.1.2):
[root@host2:~]$ bash --version|head -1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
[root@host2:~]$ cat <(echo sort file{1,2})
sort file1 file2
[root@host2:~]$ join <(sed 's/\r//g;s/^[^:]*://' file{1,2}|LANG=C sort)
join: missing operand after `/dev/fd/63'
Try `join --help' for more information.
[root@host2:~]$
Run Code Online (Sandbox Code Playgroud)
它是否为bash4做出了"硬编码"(并且预期?)的更改?或者这个扩展的行为是由一些bash级别的设置(比如set -B/ set +B)控制的,可以切换回old/legacy/bash3模式吗?我宁愿改变一些shell范围的开关(而不是重写一堆脚本).
如果这个(bash3)"功能"在错误修复或改进期间被切断 …
我有一个带有嵌入式 tomcat (tomcat-embed-core-8.5.57.jar) 的 spring-boot “fat” jar (1.5.22)。
jar 内部 - BOOT-INF/lib 下有许多“内部”jar。
类加载器加载这些内部 jar 的顺序是什么?
如果我在多台计算机上运行- 内部罐子是否会以相同的确切java -jar myFatSpringBoot.jar顺序被拾取,或者它是否“取决于”每台计算机上的某些内容?(FS/tmpfs/java/等)
更新:许多响应者表示,它按照它们在 fat jar 中出现的确切顺序获取内罐(因此至少 QA 和 PROD 对于同一个 fat jar 应该表现相同的方式,这与非 spring-boot .war 应用程序不同)。
现在我想知道在创建/打包罐子的过程中我们是否有任何机制来保存/强制/指定内部罐子的顺序?(maven/gradle/...)
请原谅我毫无用处cat,而且是echo预先的,但是当less在 ~2GB .gz 文件上运行时,我看到 ~25GB 的 RAM 被消耗(尽管输出被通过管道传输到 awk 并在那里消耗):
[user@mybox:~]$ cat <(echo '173abcde7665559.90651926
131abcde7298936.49040546
... (25 lines total here) ...
186abcde4858463.43044639
163abcde9409643.80726489'|awk '{print "KEY 1"length($1)-16":"$1}';
less /tmp/stats.gz)|awk '{if("KEY"==$1){K[$2]=1}else{if($8 in K)print}}' >bad25&
Run Code Online (Sandbox Code Playgroud)
我预计上面的内容不需要 RAM 就能完成,但令我惊讶的是,大约 2.5 小时后(当时读取 .gz 的进度已达到 89.8%):
[user@mybox:~]$ ps auxf|grep -e 'pts/2' -e PID |grep -v grep
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user 26896 0.0 0.0 68356 1580 pts/2 Ss+ 15:23 0:00 \_ /bin/bash
user …Run Code Online (Sandbox Code Playgroud) bash ×2
linux ×2
shell ×2
algorithm ×1
awk ×1
curly-braces ×1
expansion ×1
gzip ×1
java ×1
less-unix ×1
quickselect ×1
rhel ×1
sorting ×1
spring-boot ×1
tomcat ×1