AB 预请求与其他压测工具
在进行性能测试时,预请求(Pre-request)是一个非常重要的步骤。它可以帮助我们在正式压测之前,确保系统处于正确的状态。本文将介绍如何使用 ab(Apache Benchmark)工具进行预请求,并介绍其他常用的压测工具。 1. AB 预请求ab 是 Apache 提供的一个简单的压测工具,常用于 HTTP 服务的性能测试。在进行正式压测之前,通常需要进行一些预请求,以确保系统已经预热,或者确保某些资源已经加载。 1.1 什么是预请求?预请求是指在正式压测之前,发送一些请求到目标服务器,以确保系统处于稳定状态。这些请求可以帮助我们: 预热服务器,避免冷启动带来的性能影响。 确保数据库连接池已经初始化。 确保缓存已经加载。 1.2 使用 AB 进行预请求假设我们要对一个 API 进行压测,首先可以使用 ab 发送一些预请求: ab -n 100 -c 10 http://example.com/api/ -n 100:表示发送 100 个请求。 -c 10:表示并发数为 10。 这个命令会发送 100 个请求到 http://example.com/api/,并...
Redis 慢查询日志详解:如何定位和优化性能瓶颈
Redis 是一个高性能的键值存储系统,但在实际使用中,某些命令可能会因为数据量大或复杂度高而导致执行时间过长,进而影响整体性能。Redis 提供了慢查询日志功能,帮助我们定位这些性能瓶颈。本文将详细介绍 Redis 慢查询日志的使用方法,并分享一些优化建议。 1. 什么是 Redis 慢查询日志?Redis 慢查询日志用于记录执行时间超过指定阈值的命令。这些命令可能是 Redis 性能瓶颈的根源,通过分析慢查询日志,可以优化 Redis 的使用方式。 2. 慢查询日志的配置参数Redis 提供了两个配置参数来控制慢查询日志的行为: slowlog-log-slower-than:指定执行时间的阈值(单位:微秒)。默认值为 10000 微秒(10 毫秒)。 slowlog-max-len:指定慢查询日志的最大长度(即最多记录多少条慢查询)。默认值为 128 条。 可以通过 Redis 配置文件(redis.conf)或运行时命令来修改这些参数。 3. 查看和修改慢查询日志配置查看当前配置redis-cli config get slowlog-log-slower-...
加密通信的流行工具
工具特点适用场景Stunnel简单易用,支持 SSL/TLS 加密快速实现加密通信OpenVPN功能强大,支持完整 VPN 解决方案企业级 VPN 部署SSH 隧道无需额外工具,支持动态端口转发临时加密通信WireGuard高性能,轻量级,适合现代 VPN 需求高性能 VPN,移动设备IPSec网络层加密,适合大规模部署企业级网络加密HAProxy支持负载均衡和 SSL/TLS 终止高并发 Web 服务Nginx高性能反向代理,支持 HTTPSWeb 服务加密Socat多功能网络工具,支持多种协议临时测试或调试Tailscale基于 WireGuard,简单易用团队协作,远程办公Let's Encrypt (Certbot)免费 SSL/TLS 证书,自动化管理低成本 HTTPS 部署Cloudflare Argo Tunnel无需开放端口,集成 Cloudflare 功能安全暴露本地服务
PHP 接入 OneZore
在现代应用开发中,数据的安全性至关重要。OneZore 是一个强大的服务,但为了确保数据传输的安全性,我们通常需要使用加密通道。本文将介绍如何通过 Stunnel 建立加密通道,并使用 PHP 安全地连接 OneZore。 什么是 Stunnel?Stunnel 是一个开源的多平台代理工具,用于在不支持加密的客户端和服务端之间提供 SSL/TLS 加密。它通过将未加密的流量封装在加密通道中,确保数据在传输过程中的安全性。 为什么使用 Stunnel? 加密通信:确保数据在传输过程中不被窃听或篡改。 兼容性:支持多种协议,适用于不同系统或应用之间的安全通信。 灵活性:可以在不修改现有应用代码的情况下实现加密通信。 实现步骤1. 安装 Stunnel首先,我们需要在服务器上安装 Stunnel。 在 Linux 上安装 Stunnelsudo apt-get updatesudo apt-get install stunnel4 在 Windows 上安装 Stunnel从 Stunnel 官网 下载并安装。 2. 配置 Stunnel编辑 Stunnel 的配置...
通过端口和进程ID定位进程运行地址
在实际的系统管理和故障排查中,我们经常需要根据端口或进程ID(PID)来定位进程的运行地址。本文将详细介绍如何通过端口找到进程ID,再通过进程ID找到进程的运行地址。 场景描述假设我们有一条Redis命令日志: 1739755907.286905 [0 172.31.0.12:47294] "ZADD" "test_hash" "2" "1" 从日志中我们可以看到,Redis客户端连接的IP地址是172.0.0.1,端口是47294。我们的目标是通过这个端口找到进程ID,再通过进程ID找到进程的运行地址。 步骤详解1. 登录到目标服务器首先,我们需要登录到IP地址为172.0.0.1的服务器。可以使用SSH命令登录: ssh user@172.0.0.1 2. 通过端口找到进程ID登录到服务器后,我们可以使用lsof命令来查找哪个进程正在使用端口47294: lsof -i :47294 输出可能类似于: COMMAND PID USER FD TYPE DEVICE SIZE...
SSE 协议详解:使用场景与 Swoole 实现
1. 什么是 SSE?SSE(Server-Sent Events)是一种允许服务器向客户端推送实时更新的技术。与 WebSocket 不同,SSE 是单向的,即服务器可以向客户端发送数据,但客户端不能向服务器发送数据。SSE 基于 HTTP 协议,使用简单的文本格式进行数据传输。 2. SSE 与 WebSocket 的区别2.1 通信方式 SSE: 单向通信,服务器向客户端推送数据。 WebSocket: 双向通信,服务器和客户端可以互相发送数据。 2.2 协议 SSE: 基于 HTTP 协议,使用简单的文本格式。 WebSocket: 基于独立的 WebSocket 协议,支持二进制和文本数据。 2.3 连接管理 SSE: 客户端通过 HTTP 请求建立连接,服务器保持连接并推送数据。 WebSocket: 客户端和服务器通过 WebSocket 握手建立连接,之后可以双向通信。 2.4 适用场景 SSE: 适用于服务器向客户端推送实时更新的场景,如股票行情、新闻推送等。 WebSocket: 适用于需要双向通信的场景,如聊天应用、在线游戏等。 图解 SSE ...
[踩坑] Mysql 主从延迟排故过程分析
昨天帮朋友 看一个问题, 服务器间接主从延迟问题, 延迟时间不固定, 偶现1到2小时随机出现, 每次延迟最高30秒,维持1分钟左右. 主库CPU长期50% 负载不严重, 从库了解到更是没流量没负载. 常见出现主从延迟的场景如下: 主从配置不同, 从库配置查同步慢 从库负载过高, 导致延迟 大事务操作, insert select 最为经典, 还有 就是 for update / delete / update 语句中的 where 使用区间索引. 了解到 可以排除前两样 1 和 2, 排除法定位 查询是否存在慢日志. 使用谷歌的GCP云服务, 内部提供了个查询工具, 通过平均执行时间倒序 找出问题的 逐一SQL排查 发现 发现 存在 insert select 语句 是个大问题 又发现两个 delete 语句 where 条件是 id <= $id and type=1 and status=1, id 是主键 type不是1就是2 虽然 type status 存在索引,但这个delete 语句 用到的还是 主键索引! 索引导致区间锁的...
FCM 消息简介
官方文档地址 : https://firebase.google.com/docs/cloud-messaging/fcm-architecture?hl=zh-cn Firebase Cloud Messaging (FCM) 提供了众多消息传递选项和功能。本页中的内容旨在帮助您了解不同类型的 FCM 消息以及您可以将其用于哪些目的。 消息类型您可以使用 FCM 向客户端发送两种类型的消息: 通知消息:有时被称为“显示消息”。此类消息由 FCM SDK 自动处理。 数据消息:由客户端应用处理。 通知消息通知消息包含一组用户可见的预定义键。与其相对,数据消息只包含用户定义的自定义键值对。通知消息可以包含可选的数据载荷。 数据消息数据消息仅包含自定义键值对,没有保留键名。两种消息类型的载荷上限均为 4096 个字节,但从 Firebase 控制台发送消息时会强制执行 1000 个字符的限制。 使用场景与发送方式通知消息 发送方式:在可信环境(例如 Cloud Functions 或应用服务器)中,使用 Admin SDK 或 HTTP v1 API。设置 notifica...
在 Google Chrome 中通过开启 `allow pasting` 解决禁止粘贴的问题
在 Web 开发中,用户体验至关重要。有时我们需要控制用户的输入,特别是在需要防止错误输入的场景中,可能会禁止粘贴操作。然而,这种限制可能会影响用户的正常操作。本文将介绍如何在 Google Chrome 中通过开启 allow pasting 解决禁止粘贴的问题,并提供代码示例。 1. 理解粘贴限制在某些应用中,我们可能需要禁止用户在特定输入框中粘贴内容。例如,用户输入密码或敏感信息时,可能希望确保信息的安全性。然而,完全禁止粘贴操作可能会导致用户的不便。 2. 使用 allow pasting 属性通过设置输入框的 allow pasting 属性,我们可以在一定程度上控制用户的粘贴行为。虽然没有直接的 allow pasting 属性,但可以通过 JavaScript 的事件监听器实现类似的效果。 3. 示例代码以下是一个简单的 HTML 示例,展示如何使用 JavaScript 实现禁止粘贴的同时,提供一个按钮来允许用户重新启用粘贴操作。 HTML 结构<!DOCTYPE html><html lang="zh"><...
failed (13: Permission denied) while reading upstream 解决方法
2025/01/19 23:51:09 [crit] 9471#9471: *76105 open() "/var/lib/nginx/tmp/fastcgi/0/69/0000000690" failed (13: Permission denied) while reading upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php/index?addtabs=1&sort=show_name&order=desc&filter=%7B%7D&op=%7B%7D&_=1 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "127.0.0.1:8009" 【解决方法】vi /usr/local/nginx/conf/nginx.conf#user nobody; 修改为 user root; 重启ngi...


![[踩坑] Mysql 主从延迟排故过程分析](/assets/migrated/e9f73b536516dc506670.png)





