202111-26 SSL单向认证和双向认证说明 NEW SSL(Secure Sockets Layer,安全套接字协议)是为网络通信提供安全及数据完整性的一种安全协议。本文主要介绍 SSL 单向认证和双向认证。SSL 单向认证和双向认证的区别SSL 单向认证 无需客户端拥有证书,只需服务端拥有证书。SSL 双向认证 需要客户端和服务端双方都拥有证书。SSL 单向认证相对于 SSL 双向认证的认证过程,无需在服务端验证客户端证书、以及协商加密方案,服务端发送给客户端也是未加密的密码方案(并不影响 SSL 认证过程的安全性)。一般... Read More >
202111-25 linux crontab下关于使用date命令的坑 NEW 1. date在crontab中的正确写法在测试环境中,一开发同事反馈自己设置的crontab不生效,定时任务如下:*/6 * * * * date >> /usr/local/log/log_$(date +%Y%m%d%H%M).txt咋一看,好像没什么问题。先按照思路来测试一下:直接在命令行中执行没有问题# date >> /usr/lo... Read More >
202111-24 CURL HTTP构造请求Header实现伪造来源IP的说明 NEW CURL HTTP构造请求Header实现伪造来源IP的说明伪造的只是X-FORWARDED-FOR和CLIENT-IP,REMOTE_ADDR伪造不了。$_SERVER['REMOTE_ADDR']是由nginx传递给php的参数,就代表了与当前nginx直接通信的客户端的 IP(是不能伪造的)PHP获取客户端IP,代理服务器IP,共有如下几类情况:一、没有使用代理服务器的情况:REMOTE_ADDR = 您的 IPHTTP_VIA = 没数值或不显示HTT... Read More >
202111-23 supervisorctl 非root用户调用权限最终原因 背景用supervisor来守护服务器程序, 但使用非root用户云调用supervisorctl来操作程序时, 总是提示权限问题[www@super-test ~]$ supervisorctl status error: <class 'PermissionError'>, [Errno 13] Permission denied: file:... Read More >
202111-22 oom-killer详解和实战 作为Linux下的程序员,有时不得不面对一个问题,那就是系统内存被用光了,这时当进程再向内核申请内存时,内核会怎么办呢?程序里面调用的malloc函数会返回null吗?为了处理内存不足时的问题,Linux内核发明了一种机制,叫OOM(Out Of Memory) killer,通过配置它可以控制内存不足时内核的行为。OOM killer当物理内存和交换空间都被用完时,如果还有进程来申请内存,内核将触发OOM killer,其行为如下:1.检查文件/proc/sys/vm/pa... Read More >
202111-21 线上服务器oom killer实战详解 背景最近一台线上定时任务服务器,经常不定期报错,经常是请求外部接口的时候报错了。分析单独测试没有问题,外部接口也正常响应,百思不得其解,于是根据发生报错的时间点查看系统日志,发现触发了系统的oom-killervi /var/log/messages Jun 28 17:30:06 super-task-cron kernel: php invoked oom-killer: gf... Read More >
202111-20 shell脚本实现秒级定时任务的方法 编写Shell脚本crontab.sh#!/bin/bash step=1 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do $(php '/home/www/php/crontab/crontab.php') &nbs... Read More >
202111-19 shell中判断远程服务器中文件是否存在两种场景实战 判断一个文件的常见形式为if [ -f "/data/file.txt"];then echo "true" else echo "false" fi注意:1)中括号之间的空格;2)目录最好是绝对路径,在判断远程服务器中文件是否存在时尤为重要,因为集群之间有路径的变... Read More >
202111-18 nginx方向代理wss或ws 背景1、由于联调环境需要在内网或外网使用wss,这里使用Nginx作为代理实现ws或wss。2、WebSocket 在线测试: http://www.websocket-test.com/使用Nginx代理wsNginx配置如下server { listen 80; server_name ws.phpmians... Read More >
202111-17 linux实现时间同步有哪几种方法 简介Linux实现时间同步的方法的有两种,分别是:1、使用ntpdate从时间服务器来更新时间,不需要自己做任何配置;2、使用ntp来搭建自己的时间服务器。由于硬件的原因,机器或多或少的跟标准时间对不上,误差几秒到几分钟不等。对于服务器来说时间不准会有很多麻烦。例如支付的时候,无法下单,游戏无法登录等。接下来将在文章中为大家分享Linux系统中如何实现时间同步,希望对大家有所帮助方法一:用ntpdate从时间服务器更新时间如果linux系统没有ntpdate这个命令,可以输入... Read More >
202111-16 linux下追查线上问题常用命令 找出当前系统内存使用量较高的进程方法1:ps aux | head -1;ps aux|grep -v PID | sort -rnk4 | head -10 方法2:top 然后 大写MM – 以内存占用率大小的顺序排列进程列表VIRT:virtual memory usage 虚拟内存1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量RES:residen... Read More >
202111-15 实例内存使用率过高 现象描述Linux 云服务器实例出现由内存问题引发的故障。例如,系统内部服务响应速度变慢、服务器登录不上、系统触发 OOM(Out Of Memory)等。可能原因可能是实例内存使用率过高等问题引起。通常情况下当实例内存使用率持续高于90%时,可判断为实例内存使用率过高。排查思路参考 处理步骤,判断问题是否由内存使用率过高引起。参考 其他内存问题典型案例分析,定位问题原因。处理步骤参考 相关操作,查看内存使用率是否过高。内存使用率过高,则执行下一步。内存使用率正常,则请参考... Read More >
202111-15 nginx和php-fpm两种通信方式对比UnixSocket和TcpSocket 一:概念tcp socket允许通过网络进程之间的通信,也可以通过loopback进行本地进程之间通信。unix socket允许在本地运行的进程之间进行通信。二:理论分析unix socket减少了不必要的tcp开销,而tcp需要经过loopback,还要申请临时端口和tcp相关资源。但是,unix socket高并发时候不稳定,连接数爆发时,会产生大量的长时缓存,在没有面向连接协议的支撑下,大数据包可能会直接出错不返回异常。tcp这样的面向连接的协议,多少可以保... Read More >
202111-15 linux内存回收之drop cache Linux有自己完备的一套内存回收机制,并不需要人为的干预,但它同时也提供了一种手动释放的手段,可以让我们在调试的时候使用,方法是通过设置"/proc/sys/vm/drop_cache"参数。这个参数可接收3个数字的输入,分别是1, 2和3,写入1代表只释放page cache的可回收部分,写入2代表只释放slab cache中的可回收部分。可回收的slab cache是指在调用"kmem_cache_create"函数向slab分配... Read More >
202111-14 数据库面试葵花宝典,让你面试一次过 葵花宝典Question 1:你目前接触的mysql版本是什么?除了官方版本,还接触过其他的mysql分支版本嘛?产生分支的原因许多开发人员认为有必要将其拆分成其他项目,并且每个分支项目都有自己的专长。该需求以及Oracle对核心产品增长缓慢的担忧,导致出现了许多开发人员感兴趣的子项目和分支三个流行MySQL分支:Drizzle、MariaDB和Percona Server(包括XtraDB引擎)MariaDB不仅是mysql的替代品,主要还是创新和提高mysql自有技术。&... Read More >
202111-14 实例内存未耗尽时触发 Out Of Memory 现象描述Linux 云服务器在内存使用率未占满的情况下触发了 OOM(Out Of Memory)。如下图所示:可能原因可能是由系统可用内存低于 min_free_kbytes 值导致。min_free_kbytes 值表示强制 Linux 系统最低保留的空闲内存(Kbytes),如果系统可用内存低于设定的 min_free_kbytes 值,则默认系统启动 oom-killer 或强制重启。具体行为由内核参数 vm.pa... Read More >
202111-14 JWT 避坑指南:nbf 验签失效问题的解决 背景最近sentry中有一个lumen项目经常收到一个报错,如下:Not Before (nbf) timestamp cannot be in the future如果隔几秒再请求(例如使用 Chrome 开发者工具中的 Replay XHR),就会成功。nbf 字段的原理查看上面的报错信息,会发现有一个 nbf,nbf 是 JWT 协议中的一个字段,是 Not Before 的缩写,表示 JW... Read More >
202111-13 TCP半连接队列满了会发生什么?又该如何应对 上一篇我们讲了全连接队列满的情况,有没看过的小伙伴可以先看上一篇:/?id=492下面我们实战下半连接队列慢的情况实战 - TCP 半连接队列溢出 如何查看 TCP 半连接队列长度?很遗憾,TCP 半连接队列长度的长度,没有像全连接队列那样可以用 ss 命令查看。但是我们可以抓住 TCP 半连接的特点,就是服务端处于 SYN_RECV 状态的 TCP 连接,就是在 TCP 半连接队列。于是,我们可以使用如下命令计算当前 TC... Read More >
202111-13 TCP全链接队列满的问题分析之net.core.somaxconn详解 背景最近控制台查看腾讯云服务器状态时,发现一个异常情况提示如下:该实例最近12小时内在2021-11-13 14:48出现过TCP全链接队列满的情况,为避免成为业务瓶颈,建议您检查业务健康情况。可参考文档:点击查看TCP 全连接队列满TCP 全连接队列的长度取 net.core.somaxconn 及业务进程调用 listen 时传入的 backlog 参数,两者中的较小值。TCP 全连接队列足最大值取决于 somaxconn 和 backlog 之间的最... Read More >
202111-13 lumen自带的redis queue注意事项 问题现象 Illuminate\Queue\MaxAttemptsExceededException/artisan in ?xxx_queue_name has been attempted too many times or run too long. The job may have previously timed out. 1.1 查找reason: 1.1.1 报错的job已执行成功,maxTries=1; 1.... Read More >