zoukankan      html  css  js  c++  java
  • Linux系统下编写shell脚本传入参数打印系统当前线程数到指定文件

      最近在做性能测试,要查看系统执行过程中线程数,很简单输入命令:netstat -anp |grep java |wc -l,可以查询。但是如何在执行过程定时打印系统线程数且将结果输出到指定文件呢?也很简单我们直接写一个shell脚本执行下就可以了。以下是思路

         1:创建目录,且创建个脚本:mkdir epayshell;   touch output-thread.sh,编辑脚本 vi output-thread.sh

      2:编写脚本:设置变量step=5,该参数控制每5秒执行一次命令;outFile变量指定输出文件路径为当前路径;for循环判断小于60,则每5s执行date、netstat -anp |grep java |wc -l命令且将结果输出到outFile当前路径下。

    step=10

    outFile=out.log

    for (( i = 0; i < 20; i=(i+step) )); do
            date >> $outFile
            netstat -anp |grep java |wc -l >> $outFile
            sleep $step
    done
    exit 0

       3:保存脚本,执行结果。

       执行脚本命令:sh ./output-thread.sh。在当前路径下生成文件out.log。打开可看见结果

    4:优化该脚本,可以参数化执行该脚本。

       从步骤2可以看出脚本只能执行2次,且脚本每10s执行命令date、netstat -anp |grep java |wc -l,没有实现参数化。可以优化。

      采用$0,$1,$2..等方式获取脚本命令行传入的参数。$1第一个参数为:执行时间;$2第一个参数为:多少秒执行一次;$3第一个参数为:执行结果文件名,如果第三个参数为空则默认输出的文件名为out.log

    execTime=$1
    step=$2
    outFile=out.log
    if [ -n "$3" ] ;then
        outFile=$3
    fi

    rm -rf $outFile

    for (( i = 0; i < execTime; i=(i+step) )); do
            date >> $outFile
            netstat -anp |grep java |wc -l >> $outFile
            sleep $step
    done

    exit 0

       例如执行:sh ./output-thread.sh 20 10 out1.log;表明脚本执行次数为2(20/10=2);每10秒执行一次;输出文件名为out1.log。执行结果如图

  • 相关阅读:
    国家行政区划地区编码表
    Java循环中标签的作用(转)
    通过ribbon 根据服务名获取所有服务实例的IP和端口列表
    rabbitmq重装依赖的erlang 要注意
    Rabbitmq关于集群节点功能的读书笔记
    CentOS7统计某个进程当前的线程数
    理解同步、异步、阻塞、非阻塞(传送门)
    代理模式和装饰模式区别
    【转载】Asp.Net生成图片验证码工具类
    【转载】使用宝塔Linux面板屏蔽某些IP访问你的服务器
  • 原文地址:https://www.cnblogs.com/qiaoli0726/p/9908632.html
Copyright © 2011-2022 走看看