1) opcache缓存的问题。如果开启了opcache缓存,关闭了脚本检查opcache.validate_timestamps=0,修改代码会生效吗?如果不生效需要怎么办?

opcache.validate_timestamps boolean
如果启用,那么 OPcache 会每隔 opcache.revalidate_freq 设定的秒数 检查脚本是否更新。 如果禁用此选项,你必须使用 opcache_reset() 或者opcache_invalidate() 函数来手动重置 OPcache,也可以 通过重启 Web 服务器来使文件系统更改生效。

opcache.revalidate_freq integer
检查脚本时间戳是否有更新的周期,以秒为单位。 设置为 0 会导致针对每个请求, OPcache 都会检查脚本更新。如果 opcache.validate_timestamps 配置指令设置为禁用,那么此设置项将会被忽略。

【注意】如果禁用此选项,你必须使用 opcache_reset() 或者 opcache_invalidate() 函数来手动重置 OPcache,也可以 通过重启 Web 服务器来使文件系统更改生效。重启php-fpm或nginx都是没有用的,缓存存储到共享内存里面的,不清除共享内存,缓存是不会被清理的。
如果修改源代码一直不生效,就差删除文件了,可以排查一下这个设置。

2)php.ini修改后php-fpm子进程如果异常退出了,会加载最新配置吗?
不会pm = dynamic本身就支持动态子进程的,如果子进程重新创建使用新配置就乱套了。

参考文档:
https://www.php.net/manual/zh/opcache.configuration.php#ini.opcache.revalidate-freq

  • ifconfig
  • 本机ip

  • hostname -i
  • 本机ip

  • curl ifconfig.io
  • 本机外网ip

  • ss
  • (https://www.cnblogs.com/yychuyu/p/11459575.html)
    Socket Statistics 的缩写,用来统计 socket 连接的相关信息,它跟 netstat 差不多,但有着比 netstat 更强大的统计功能,能够显示更多更详细的连接信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ss -s  #分类统计socket链接情况
    ss -a | wc -l 统计所有socket链接数目
    ss -ta #所有 TCP socket
    ss -ua #所有 UDP socket
    ss -wa #所有 RAW socket
    ss -xa #所有 UNIX socket
    ss -4a #所有 IPV4 socket
    ss -6a #所有 IPV6 socket
    ss -t  #要查看刚建立的 TCP 连接
    ss -lt #要仅显示监听 socket ,尝试
  • netstat
  • (https://www.cnblogs.com/ftl1012/p/netstat.html)
    netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告

    1
    netstat -nlp #数字(不解析主机端口)显示正在监听的进程pid
  • tcpdump
  • 功能强大

    1
    tcpdump  -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854   #抓取http
  • lsof
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    lsof -i:80 #查看打开80端口的所有进程
    lsof -i [46] [protocol][@hostname|hostaddr][:service|port]
    46 --> IPv4 or IPv6
    protocol --> TCP or UDP
    hostname --> Internet host name
    hostaddr --> IPv4地址
    service --> /etc/service中的 service name (可以不只一个)
    port --> 端口号 (可以不只一个)
    例如:
    lsof -i tcp@127.0.0.1  #tcp监控本地
    lsof -i 4 #显示ipv4
  • iftop
  • https://www.vpser.net/manage/iftop.html

    位运算( 位运算baike

  • 奇偶判断
  • 1
    2
    3
    if(a&1 == 1){
    //偶数
    }
  • 两数交换
  • 1
    2
    3
    4
    5
    6
    7
    8
    //常规
    x = x^y
    y = x^y
    x = x^y
    //简写
    x ^= y
    y ^= x
    x ^= y
  • 数组里面就一个数出现一次 其他都是两次 求出这个数
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    int find(int[] arr)
    {
        int tmp = arr[0];
        for(int i=1;i<arr.length;i++)
        {
             tmp ^= arr[i];
        }
        return tmp;
    }
  • 不用加减运算符求两数只和
  • https://leetcode-cn.com/problems/sum-of-two-integers
    这个地方要了解加法器是如何运行的
    另外一个重点是负数在内存里面存储是补码 (https://blog.csdn.net/zl10086111/article/details/80907428)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    int getSum(int a, int b) {
        while (b != 0) {
            unsigned x = a ^ b;
            unsigned y = (unsigned)(a & b) << 1;
            a = x;
            b = y;
        }
        return a;
    }
    /*
            整数按照加法器来搞
             5 + 3
             0101
             0011

             x= 5^3 = 0110
             y= 5&3 = 0001

             x^ (y<<1) =
                    0110
                    0010 = 0100
             x& (y<<1)
                    0110
                    0010 = 0010

             x = 0100
             y = 0010


             x^ (y<<1) =
                    0100
                    0100 = 0000
             x& (y<<1)
                    0100
                    0100 = 0100

             x = 0000
             y = 0100

             x = 0000 ^ 1000 = 1000
             y = 0000 & 1000 = 0
    */

    其他请参考:位运算装逼指南 https://blog.csdn.net/Mrchai521/article/details/90318128

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    1.进制转换
        echo "obase=16;89"|bc

    2.时间戳转换

        2.1
            date -d '2013-2-22 22:14' +%s
            1361542440
        2.2
            date -d @1361542596
            Fri Feb 22 22:16:36 CST 2013
        2.3
            date -d @1361542596 +"%Y-%m-%d %H:%M:%S"
            2013-02-22 22:16:36

    3.json 格式化

        echo '{"aa":"good"}' | jq
        {
          "aa": "good"
        }

    4.其他:
        计算器:bc
        md5工具:md5sum

    vim curl-time.txt 添加以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    \n
             remote_ip: %{remote_ip}\n
           remote_port: %{remote_port}\n
              local_ip: %{local_ip}\n
            local_port: %{local_port}\n
                  http: %{http_code}\n
                   dns: %{time_namelookup}s\n
              redirect: %{time_redirect}s\n
          time_connect: %{time_connect}s\n
       time_appconnect: %{time_appconnect}s\n
      time_pretransfer: %{time_pretransfer}s\n
    time_starttransfer: %{time_starttransfer}s\n
         size_download: %{size_download}bytes\n
        speed_download: %{speed_download}B/s\n
                      ----------\n
            time_total: %{time_total}s\n
    \n

    试一试:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    curl  -w "@/Users/mac/Desktop/curl-time.txt" www.baidu.com
    <!DOCTYPE html>
    <!--STATUS OK--><html>*******</html>

             remote_ip: 180.101.49.12 #服务器ip
           remote_port: 80            #服务器端口
              local_ip: 30.208.75.45  #本地ip
            local_port: 49200         #本地端口
                  http: 200           #http状态码
                   dns: 0.030925s     #从开始到域名解析完成的时间
              redirect: 0.000000s     #所有重定向步骤(包括名称查找、连接、预传输和传输)所用的时间(秒)。显示多个重定向的完整执行时间。
          time_connect: 0.069830s     #从开始到tcp协议建立完成的时间
       time_appconnect: 0.000000s     #从开始到SSL/SSH/etc connect/handshake协议完成的时间
      time_pretransfer: 0.070846s     #从开始到文件传输即将开始
    time_starttransfer: 0.114130s     #从开始到第一个字节即将传输(time_starttransfer-time_pretransfer可以代表服务器处理的时间)
         size_download: 2381bytes     #总下载量
        speed_download: 20788.000B/s  #下载平均速度
                      ----------
            time_total: 0.114534s

    也可以直接输出,不用格式化文件方式。例如:
    curl  -w "time_total:%{time_total}" www.baidu.com

    如果这些环节还不够怎么办
    man curl
    找到:
    -w, –write-out 看看哪些变量是需要的可以再添加以下。