Author: jpuyy

  • ab测试

    centos6

    安装

    yum install httpd-tools

    -c 并发数
    -n 总请求数

    ab -c 100 -n 10000 http://www.abc.com/
  • shell下的三元表达式

    如果第一部分成功则执行第二部分

    否则就执行第三部分

    nginx -s reload &&  echo 'nginx 重新载入成功' || echo 'nginx 重新载入失败'

    基本就的实现

  • 理解iops

    IOPS和数据吞吐量适用于不同的场合:
    读取10000个1KB文件,用时10秒 Throught(吞吐量)=1MB/s ,IOPS=1000 追求IOPS
    读取1个10MB文件,用时0.2秒 Throught(吞吐量)=50MB/s, IOPS=5 追求吞吐量

  • nf_conntrack: table full, dropping packet.问题解决

    centos6下在并发量大的时候出现这样的报错

    nf_conntrack: table full, dropping packet.
    nf_conntrack: table full, dropping packet.
    nf_conntrack: table full, dropping packet.

    看一下 nf_conntrack 表里的记录及数量

    less /proc/net/nf_conntrack

    wc -l /proc/net/nf_conntrack

    如果表满了会连 ssh 都连不上来

    默认表的最大值是 65535

    cat /proc/sys/net/nf_conntrack_max

    需要临时加大

    echo ‘100000’ > /proc/sys/net/nf_conntrack_max

    需要永久生效

    在 /etc/sysctl.conf 里添加

    net.nf_conntrack_max = 655360
    net.netfilter.nf_conntrack_max = 655350
    net.netfilter.nf_conntrack_tcp_timeout_established = 1200

    这里有个坑,如果在没有开启 iptables 的情况下使用

    iptables -L -t nat

    会导致加载 nf_conntrack 并使用默认值, sysctl 里的值就不生效了

    这时需要重启一下 iptables 才能加载 sysctl 中的值

  • 对比两个文件夹是否相同

    find dirname1 -type f  -exec md5sum {} + | awk '{print $1}' | sort | md5sum
    find dirname2 -type f  -exec md5sum {} + | awk '{print $1}' | sort | md5sum
    

    如果值不一样
    分别进入两个目录中

    for i in `ls`; do echo $i ; find $i -type f  -exec md5sum {} + | awk '{print $1}' | sort | md5sum ; done
    
  • pi计算

    计算pi

    c语言版

    #include <stdio.h>
    
    int main() {
        int r[2800 + 1];
        int i, k;
        int b, d;
        int c = 0;
    
        for (i = 0; i < 2800; i++) {
            r[i] = 2000;
        }
    
        for (k = 2800; k > 0; k -= 14) {
            d = 0;
    
            i = k;
            for (;;) {
                d += r[i] * 10000;
                b = 2 * i - 1;
    
                r[i] = d % b;
                d /= b;
                i--;
                if (i == 0) break;
                d *= i;
            }
            printf("%.4d", c + d / 10000);
            c = d % 10000;
        }
    
        return 0;
    }

    gcc pi.c -o pi

    用 shell 的 bc 命令计算很方便

       EXAMPLES
           In /bin/sh,  the following will assign the value of "pi" to the shell variable pi.
                   pi=$(echo "scale=10; 4*a(1)" | bc -l)
    

    测试记录

    bash
    time pi=$(echo "scale=10000; 4*a(1)" | bc -l)
    
    # a is arctan, and this give pi to 10000 digits.
    
    

    2022-01-13 MacBook Pro (14-inch, 2021) Apple M1 Max
    real 0m50.483s
    user 0m49.896s
    sys 0m0.179s

    2020-10-27 MacBook Pro (16-inch, 2019) 2.6 GHz 6-Core Intel Core i7
    real 1m17.887s
    user 1m17.080s
    sys 0m0.184s

    2020-11-21 Mac mini (2018) 3.2 GHz 6-Core Intel Core i7
    real 1m8.796s
    user 1m8.647s
    sys 0m0.066s

    2020-11-21 windows (WSL) centos7 AMD 锐龙5 3600X 处理器 (r5)7nm 6核12线程 3.8GHz 95W AM4接口 盒装CPU

    yum install bc
    real 1m16.686s
    user 1m16.609s
    sys 0m0.047s

    2019? MacBook Pro (15-inch, 2017) 耗时 real 1m56.849s