zoukankan      html  css  js  c++  java
  • inotify 监控几个脚本

    inotify 监控简单shell

    for foo in /proc/*/fd/*; do readlink -f $foo; done | grep inotify | sort | uniq -c | sort -nr

    一个很不错的script

    #!/bin/sh
    # Get the procs sorted by the number of inotify watchers
    # @author Carl-Erik Kopseng
    # @latest https://github.com/fatso83/dotfiles/blob/master/utils/scripts/inotify-consumers
    # Discussion leading up to answer: https://unix.stackexchange.com/questions/15509/whos-consuming-my-inotify-resources
    usage(){
        cat << EOF
    Usage: $0 [--help|--limits]
        -l, --limits    Will print the current related limits and how to change them
        -h, --help      Show this help
    EOF
    }
    limits(){
        echo "
    Current limits
    -------------"
        sysctl fs.inotify.max_user_instances  fs.inotify.max_user_watches
        cat <<- EOF 
    Changing settings permanently
    -----------------------------
    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p # re-read config
    EOF
    }
    if [ "$1" = "--limits" -o "$1" = "-l" ]; then
        limits
        exit 0
    fi
    if [ "$1" = "--help" -o "$1" = "-h" ]; then
        usage 
        exit 0
    fi
    if [ -n "$1" ]; then
        echo "
    Unknown parameter '$1'
    " > /dev/stderr
        usage
        exit 1
    fi
    generateRawData(){
        # From `man find`: 
        #    %h     Leading directories of file's name (all but the last element).  If the file name contains no slashes  (since  it
        #           is in the current directory) the %h specifier expands to `.'.
        #    %f     File's name with any leading directories removed (only the last element).
        #
        find /proc/*/fd 
        -lname anon_inode:inotify 
        -printf '%hinfo/%f
    ' 2>/dev/null 
        
        | xargs grep -c '^inotify'  
        | sort -n -t: -k2 -r 
    }
    printf "
    %10s
    " "INOTIFY"
    printf "%10s
    " "WATCHER"
    printf "%10s  %5s     %s
    " " COUNT " "PID" "CMD"
    printf -- "----------------------------------------
    "
    IFS=''; # to avoid `read` from interpreting whitespace and keep whole lines
    generateRawData | while read line; do
        watcher_count=$(echo $line | sed -e 's/.*://')
        pid=$(echo $line | sed -e 's//proc/([0-9]*)/.*/1/')
        cmdline=$(ps --columns 120 -o command -h -p $pid) 
        printf "%8d  %7d  %s
    " "$watcher_count" "$pid" "$cmdline"
    done

    参考资料

    https://github.com/fatso83/dotfiles/blob/master/utils/scripts/inotify-consumers

  • 相关阅读:
    趣味网站、趣味应用
    趣味网站、趣味应用
    论文写作的句型
    Python Tricks(二十一)—— 排列组合的计算
    Python Tricks(二十一)—— 排列组合的计算
    辨异 —— 有两人生日在同一天、只有两人生日在同一天
    辨异 —— 有两人生日在同一天、只有两人生日在同一天
    品味电影
    品味电影
    HDU 4414 Finding crosses (DFS + BFS)
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/12956056.html
Copyright © 2011-2022 走看看