• Linux学习笔记


    java stack--dump-jstack.sh

    #!/bin/sh

    if [ "x$JAVA_BIN" = "x" ];then
    for jps_path in `find / -name jps`
    do
    JAVA_BIN=`dirname $jps_path`
    done
    fi

    echo "JAVA_HOME: "$JAVA_BIN
    if [ "x$JAVA_BIN" = "x" ];then
    echo "JAVA_HOME can not be find."
    exit 1
    fi

    LOG=./jstack.log

    if [ $# -lt 2 ]; then
    echo "Usage: dump-jstack.sh pid -c count [-i interval] [-m jstack -m]"
    exit 1
    fi

    pid=$1
    shift

    declare -i count=5
    interval=10
    tdn=""

    while [ $# -gt 0 ]; do
    case $1 in
    -c ) # count
    count=$2
    shift 2
    ;;
    -i ) # interval
    interval=$2;
    shift 2
    ;;
    -m ) # jstack -m
    tdn="m"
    shift 2
    ;;
    * ) # ignore other params
    shift
    ;;
    esac
    done
    echo "$JAVA_BIN/jstack -l $pid $tdn >> $LOG"
    while [ $count -gt 0 ]; do
    $JAVA_BIN/jstack -l "$pid" $tdn >> $LOG
    count=`expr $count-1`

    if [ $count -gt 0 ]; then
    sleep $interval
    fi
    done

    性能问题排查:

    Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。
    内存资源占用:free命令

    IO占用:
    iostat -d -k 1 10 #查看TPS和吞吐量信息
    iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)
    iostat -c 1 10 #查看cpu状态

    磁盘使用量统计:
    df -lh
    du -h /mnt/disk1/hdh/
    du -sh *

    CPU、磁盘、网络使用统计:
    dstat

    当前TCP连接数查看:
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

    Linux系统缓存释放:
    echo 3 > /proc/sys/vm/drop_caches

    查看Linux下安装的服务:
    chkconfig --list

    关闭swap:
    SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用。
    要关闭swap,执行以下步骤。
    1)
    # swapoff –a
    # sysctl vm.swappiness=0
    2)
    编辑/etc/sysctl.conf,增加以下内容:
    vm.swappiness=0
    3)
    再执行:
    sysctl –p
    要确认swap是否已关闭。执行以下命令,如果swap成功关闭,则返回0
    cat /proc/sys/vm/swappiness

    Linux下.和..
    . / 有空格的点号等同于source命令,表示在当前shell环境执行后面的命令或脚本(不加点号默认是新开一个shell执行的)。例如 . /home/test.sh 等同于 source /home/test.sh。
    用source执行的脚本所做的任何改变会影响当前shell(如其中有用cd改变目录,脚本执行完后目录就变掉了);如果没用source,就不会影响当前shell。

    以. (空格)运行的子Shell,在子Shell中执行exit命令时,也会退出父Shell

    . ./test.sh
    表示以source方式在当前shell执行当前目录下的test.sh脚本。

    Linux下CPU信息查看
    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数
    # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
    # 查看物理CPU个数
    cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
    # 查看每个物理CPU中core的个数(即核数)
    cat /proc/cpuinfo| grep "cpu cores"| uniq
    # 查看逻辑CPU的个数
    cat /proc/cpuinfo| grep "processor"| wc -l

    远程执行脚本
    ssh [-p $port] [$user@]$ip 'cmd'
    $port : ssh连接端口号
    $user: ssh连接用户名
    $ip:ssh连接的ip地址
    cmd:远程服务器需要执行的操作
    ssh的-t参数
    可以提供一个远程服务器的虚拟tty终端,加上这个参数我们就可以在远程服务器的虚拟终端上输入自己的提权密码了,非常安全

    linux中shell变量$#,$@,$0,$1,$2的含义解释:
    变量说明:
    $$
    Shell本身的PID(ProcessID)
    $!
    Shell最后运行的后台Process的PID
    $?
    最后运行的命令的结束代码(返回值)
    $-
    使用Set命令设定的Flag一览
    $*
    所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
    $@
    所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
    $#
    添加到Shell的参数个数
    $0
    Shell本身的文件名
    $1~$n
    添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

    Shell中 (. file.sh)相当于souce 或者include引入函数(库)的意思

    数组遍历:
    array=(element1 element2 element3 .... elementN)
    #echo ${array[0]}
    for data in ${array[@]}
    do
    echo ${data}
    done

    脚本相对路径
    脚本执行的相对路径是相对当前目录的路径,而不是脚本所在目录的路径

    服务路径
    /etc/rc.d/init.d/network restart

    替换
    :%s/lark001/hadoop17/g
    :%s/lark002/hadoop19/g
    :%s/lark003/hadoop20/g

    exit命令

    exit - cause the shell to exit

    问题

    device is busy

    在Linux中,有时使用umount命令去卸载磁盘disk(n),可能出现umount: xxx: device is busy的情况

    可以借助fuser命令找出占用目录disk(n)的所有进程,然后kill掉

    fuser -m /mnt/disk(n)

    关于fuser,它是用来显示所有正在使用着指定的file, file system 或者 sockets的进程信息。它通常被用在诊断系统的“resource busy”问题,通常是在你希望umount指定的挂载点得时候遇到。如上所示,使用选项-m,用来查找所有正在使用disk(n)挂载点的所有进程

    mdadm软RAID的删除方法和注意事项
    1. 查询各磁盘的RAID情况
    首先通过lsblk命令查看各磁盘软mdadm RAID的情况,将其中TYPE为raid的磁盘和md类型记录下来,准备做删除处理。
    2. 删除软RAID
    如:发现有五个磁盘做了md0的软RAID,则做如下命令操作:
    ① 先将五个盘按如下命令做删除操作,删除RAID中的所有设备
    mdadm /dev/md0 --fail /dev/sdb --remove /dev/sdb
    mdadm /dev/md0 --fail /dev/sdc --remove /dev/sdc
    mdadm /dev/md0 --fail /dev/sdd --remove /dev/sdd
    mdadm /dev/md0 --fail /dev/sde --remove /dev/sde
    mdadm /dev/md0 --fail /dev/sdf --remove /dev/sdf
    注:md的类型要根据实际情况改写,此处为md0
    ② 将md0停止并移除,停止该RAID
    mdadm --stop /dev/md0
    mdadm --remove /dev/md0
    ③ 继续对以上五个磁盘作如下操作:
    mdadm --misc --zero-superblock /dev/sdb
    mdadm --misc --zero-superblock /dev/sdc
    mdadm --misc --zero-superblock /dev/sdd
    mdadm --misc --zero-superblock /dev/sde
    mdadm --misc --zero-superblock /dev/sdf
    ④ 为了防止系统启动时候启动raid,如果存在则删除以下文件
    rm -f /etc/mdadm.conf
    rm -f /etc/raidtab

  • 相关阅读:
    [Python设计模式] 第21章 计划生育——单例模式
    [Python设计模式] 第20章 挨个买票——迭代器模式
    [Python设计模式] 第19章 分公司=部门?——组合模式
    [Python设计模式] 第18章 游戏角色备份——备忘录模式
    [Python设计模式] 第17章 程序中的翻译官——适配器模式
    [Python设计模式] 第16章 上班,干活,下班,加班——状态模式
    [Python设计模式] 第14章 老板来了——观察者模式
    [Python设计模式] 第13章 造小人——建造者模式
    [Python设计模式] 第12章 基金理财更省事——外观模式
    [Python设计模式] 第11章 迪米特法则——最少知识原则
  • 原文地址:https://www.cnblogs.com/warmingsun/p/5720937.html
Copyright © 2020-2023  润新知