Linux 系统中,有很多用于快速处理数据的工具如grep awk cut sort uniq sort,他们非常非常地好用。 如果你熟练掌握他们的使用技巧,他们则可以帮你快速定位问题。最近碰到一个案例。 一个项目上数据库系统, Oracle ,运行在 LINUX 上,报进程数满了。 看到这类问题,您不需要去深究什么警告日志,数据库中进程状况啊等等。马上 在操作系统层面上看看有哪些服务器连接到这台数据库服务器上。这里使用的第一个工具就netstat 。他是系统管理工具,还不能算shell 工具。通过netstat -ntu ,找出通过tcp 和udp 连接服务器的IP 地址列表。[root@ www.linuxidc.com ~]# netstat -ntu|more Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.15.209:1521 192.168.15.65:37781 ESTABLISHED tcp 0 0 192.168.15.209:1521 192.168.15.65:37783 ESTABLISHED tcp 0 0 192.168.15.209:1521 192.168.15.65:37777 ESTABLISHED tcp 0 0 192.168.15.209:1521 192.168.15.65:37779 ESTABLISHED tcp 0 0 10.100.15.209:49895 10.100.15.207:26069 ESTABLISHED tcp 0 0 10.100.15.209:49898 10.100.15.213:6092 ESTABLISHED tcp 0 0 192.168.15.209:1521 192.168.15.65:37785 ESTABLISHED tcp 0 0 192.168.15.209:1521 192.168.15.181:21869 ESTABLISHED tcp 0 0 192.168.15.209:1521 192.168.15.181:21870 ESTABLISHED tcp 1 0 192.168.15.209:26781 192.168.15.89:1521 CLOSE_WAIT tcp 0 0 192.168.15.209:10332 192.168.15.211:6200 ESTABLISHED tcp 0 0 192.168.15.209:1521 192.168.15.181:21875 ESTABLISHED tcp 0 0 192.168.15.209:1521 192.168.15.65:37766 ESTABLISHED tcp 0 0 192.168.15.209:1521 192.168.15.181:21874 ESTABLISHED tcp 0 0 192.168.15.209:1521 192.168.15.65:37761 ESTABLISHED 下面略掉,太多了,没法显示全。 这是所有与数据库服务器连接的外部IP 信息列表。 可以看到第五列是所有的外部IP 信息。根据这些信息,找出数目那个IP 是什么?或者根据IP 数目做一个排序。 第一步,使用grep 将tcp 过滤出来,也可以使用egrep 过滤多个条件 netstat -ntu|grep "tcp" netstat -ntu|egrep "tcp|udp" 第二步,使用awk 将第五列单独截出来 netstat -ntu|grep "tcp"|awk "{print $5}" 操作如下: [root@ www.linuxidc.com ~]# netstat -ntu|grep "tcp"|awk "{print $5}"|more 192.168.15.65:37781 192.168.15.61:34281 192.168.15.65:37783 192.168.15.61:34282 192.168.15.65:37777 192.168.15.65:37779 10.100.15.207:26069 192.168.15.61:34275 10.100.15.213:6092 第三步,使用cut 将列信息以":" 为分隔符再分成不同的列, 显示第一个field netstat -ntu|grep "tcp"|awk "{print $5}"|cut -d: -f1 第四步,使用sort 默认字符顺序将字段值排序 netstat -ntu|grep "tcp"|awk "{print $5}"|cut -d: -f1|sort sort 有很多选项,可以man sort 去看。 第五步,使用uniq 将已经排序好的字段计算不同值的数目 netstat -ntu|grep "tcp"|awk "{print $5}"|cut -d: -f1|sort|uniq -c uniq -c 根据相近的值计算和,因此之前需要排序好。 第六步,使用sort -n 数字升序方式再排一下结果 netstat -ntu|grep "tcp"|awk "{print $5}"|cut -d: -f1|sort|uniq -c|sort -n 使用sort -nr ,可以按照数字降序排。 netstat -ntu|grep "tcp"|awk "{print $5}"|cut -d: -f1|sort|uniq -c|sort -nr 第七步,使用head 或tail 取头部几行或尾部几行 取尾部10 行 netstat -ntu|grep "tcp"|awk "{print $5}"|cut -d: -f1|sort|uniq -c|sort -n|tail -10 取头部10 行 netstat -ntu|grep "tcp"|awk "{print $5}"|cut -d: -f1|sort|uniq -c|sort -nr|head -10 [root@ www.linuxidc.com ~]# netstat -ntu|grep "tcp"|awk "{print $5}"|cut -d: -f1|sort|uniq -c|sort -n|tail -10 8 192.168.15.133 8 192.168.15.62 10 192.168.15.181 11 192.168.15.61 12 192.168.15.204 15 192.168.15.63 17 192.168.15.100 18 192.168.15.92 30 192.168.15.65 32 192.168.15.146 [root@ www.linuxidc.com ~]# netstat -ntu|grep "tcp"|awk "{print $5}"|cut -d: -f1|sort|uniq -c|sort -nr|head -10 32 192.168.15.146 30 192.168.15.65 18 192.168.15.92 17 192.168.15.100 15 192.168.15.63 12 192.168.15.204 11 192.168.15.61 10 192.168.15.181 8 192.168.15.62 8 192.168.15.133 这就得到我们要的结果。 这个结果中,我们可以看出各个服务器在数据库服务器上的网络连接数。 根据连接数,发现特别大的,肯定有问题。通常都应用服务端打开连接不关闭,或者出现异常无法关闭。 Linux 查看连接数命令Linux Mint 下安装配置 Oracle JDK 6相关资讯 Linux Shell
- Linux基础知识:shell基础命令 (今 10:39)
- Linux系统监控shell脚本 (04月09日)
- Linux shell脚本编程 (03月01日)
| - Linux shell数组 (07月26日)
- Linux Shell实现批量关闭局域网中 (03月10日)
- Linux系统入门教程:如何知道当前 (11/27/2015 08:36:09)
|
本文评论 查看全部评论 (0)