什么?JVM 老年代内存不断上涨竟是因为获取 ServletContext 姿势不对

2021-11-24
阅读 3 分钟
4.2k
前几日一直在筹备一个比较大的项目,发现一个问题,还好流量不是非常非常大,不然又得提桶跑路了。在线上运行的时候发现当并发过高的情况,会出现老年代内存上涨的情况。

Deliverer 1.1.2 修复使用魔术方法后调用栈丢失的问题

2021-09-09
阅读 3 分钟
1.9k
如果你对线上一个项目运行逻辑不熟悉,或者你对某个方法的调用来源不清楚,又或者线上有一个接口不知道是哪里异常退出了,还有线上调用特别耗时,都比较适合使用 Deliverer 来解决,帮助你避免跑路。

Deliverer 1.0.8 支持 PHP5 了

2021-07-03
阅读 3 分钟
1.9k
因为是为了解决祖传代码的问题,也听到群友的一些声音,还是很有必要支持下 PHP5 的,所以这段时间一直在着力解决这个版本兼容问题,没想到问题比较我预计的要难很多。

PHP 祖传代码拯救者 Deliverer 他,来了!

2021-06-24
阅读 2 分钟
2.8k
前几日有位群友接手一段祖传代码,排查很久没有解决,准备提桶跑路,最终帮其解决,完整的过程见 [链接] 但是最后代码的定位我有一些基于个人经验,实际调用的链路和我预计的不一样,都是靠猜。没有看到完整的调用链路,所以我想着需要一个工具来辅助明确查询到整个完整的调用链。

面向祖传代码 Debug,我挽回了一位准备跑路的程序员

2021-06-15
阅读 6 分钟
3.3k
交流群的风格突然骤变,没有了往日的灌水扯淡,居然聊起了技术。看了大家的全部的聊天记录,发现问题并没解决。群里难得这么多人聊技术,抱着问答不断,必有回响的原则,主动勾搭一起看看是什么问题。大概了解其问题是这样,apache 子进程一直异常退出 {代码...} 现场复现了解到其架构是 apache + php ,群友也是临时接...

异常的正确使用在微服务架构中的重要性排前三,没什么意见吧

2021-06-12
阅读 6 分钟
2.8k
PHP 在 PHP7 异常的设计和 Java 保持一致了 Exception extends Throwable ,不过在历史原因和设计理念上还是有一些细微的差别。比如 PHP 中的异常是有 code 属性的,这样就存在多种异常聚类为同一个异常,然后在catch 区块里根据 code 写不同的业务逻辑代码。

聊一聊限流、降级、熔断

2021-05-24
阅读 3 分钟
9.9k
小时候村里一到夏天,全村都开空调,村里总闸的保险丝就会因为用电量太大,自动熔断了,直接停服。股市也有一些极端情况开启熔断处理,不到万不得已,不会熔断。在 Web 工程中熔断的最小单元,也不一定是整个应用,可能只是某个服务。这里不深究学术名词定义。

XSS 防护 99%的人知道转义过滤,50%的人知道 httponly,但是只有1%的人知道它

2021-01-27
阅读 4 分钟
3.5k
防止xss 99%的都知道要做标签过滤,和标签属性过滤,50%知道非标签内容转义,40%知道httponly,10%的人知道 waf,只有1%的人知道它。

PHP 中通过 getopt 解析 GNU C 风格命令行选项

2019-11-17
阅读 2 分钟
3k
在 PHP 中,当我们在获取命令行参数时,可以通过遍历$argv来获取,其实呢是有规范可循的,也就是 GNU C-style parser for command line options 。

如何定制一款属于程序员的卫衣

2019-10-20
阅读 4 分钟
3.2k
厌倦了枯燥机械重复流水线的工作,每天时不时的被打断,不知道什么时候就被人圈到一群里,然后就要紧急支持一个事情。支线任务实在太多,晨会规划的主线任务实在没时间做,而且很多事逻辑复杂,上下文切换成本太高,工作效率低下,还容易出 bug。

彻底弄懂为什么不能把栈上分配的数组(字符串)作为返回值

2019-10-13
阅读 4 分钟
1.8k
上面是通过strndup的方式,背后也依托了malloc,所以最后也需要free。有人在微信群私信parse_scheme能用char []来做返回值吗?我们知道栈上的数组也能用来存储字符串,那我们可以改写成下面这样吗?

http client 实现 keep-alive 源码探究

2019-10-04
阅读 6 分钟
3.9k
前几天在分享"实现自己的wget"的时候,因为我们的请求是一次性的,http 头里设置的Connection: Close。在HTTP/1.1为了提升HTTP 1.0的网络性能,增加了keepalive的特性。浏览器在请求的时候都会加上Connection: Keep-Alive的头信息,是如何实现的呢?我们知道在服务端(nginx)可以通过设置keepalive_timeout来控制连接保...

Phper 学 C 兴趣入门 -为什么有的字符串处理这么难

2019-09-11
阅读 5 分钟
5.4k
可能大家对strtok不太熟悉,它的作用是用-来分割$a获取子串,循环调用可以达到和explode差不多的效果。具体可以看下官方手册里面的 demo [链接]

Phper 学 C 兴趣入门 - 字符串 - 为什么 php 手册里经常说某个函数是二进制安全的

2019-09-07
阅读 3 分钟
5.6k
补课简单说明下 ascii 码 我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从`00000000到11111111。 上个...

PHP 异常任重而道远

2019-06-19
阅读 2 分钟
8.2k
这几天观察错误日志发现有一个数据反序列化的notice错误,实际情况我是从缓存中读取数据然后反序列化,因为反序列化失败,所以实际每次都是去数据库取的值。背后性能影响还是挺大的。

因为 Java 和 Php 在获取客户端 cookie 方式不同引发的 bug

2019-05-19
阅读 6 分钟
2.5k
下面通过两个简单的实验,来看Java和Php在获取web请求中的cookie的不同之处,我下面贴出http请求的相关信息,和服务端输出的结果。

使用 Phan 为你的 PHP 项目保驾护航 - 代码静态扫描

2019-03-24
阅读 6 分钟
6.6k
很多时候,最大的优势在某些情况下就会变成最大的劣势。PHP 语法非常灵活,也不用编译。但是在项目比较复杂的时候,可能会导致一些意想不到的 bug。

一次 group by + order by 性能优化分析

2019-03-18
阅读 14 分钟
18.9k
最近通过一个日志表做排行的时候发现特别卡,最后问题得到了解决,梳理一些索引和MySQL执行过程的经验,但是最后还是有5个谜题没解开,希望大家帮忙解答下

如何成为一名优秀的工程师(语义篇)

2019-03-03
阅读 8 分钟
9.6k
不要让其他人读不懂你的代码,其他人可能就是一周后的你。时刻以“如果你写的这段代码出现故障,一个陌生人接手你的代码需要多久能处理完这个bug”来监督自己。

GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(下)

2019-02-19
阅读 5 分钟
2.9k
接着 [链接] 的案例,我们继续磕。上一篇 GDB 调试 Mysql 实战(三)优先队列排序算法探究(上) 分析了实验3中的row_size为什么是24。其他实验的row_size都是36,扫描行数也不符合预期。这篇就来探究下。

GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)

2019-02-18
阅读 5 分钟
2.1k
本篇文章关键字:优先队列排序算法、小顶堆、大顶堆 背景 接着 [链接] 的案例,我们继续磕。 回顾下实验3中的例子 {代码...} optimizer_trace.join_execution.steps的结果如下 {代码...} 关于这里的 filesort_priority_queue_optimization 算法可以参考 [链接] 在该案例中根据该结果可知,临时表使用的堆上的 memory 表...

GDB 调试 Mysql 实战(二)GDB 调试打印

2019-02-16
阅读 8 分钟
8.9k
在 [链接] 实验中,我们通过optimizer_trace发现group by会使用intermediate_tmp_table,而且里面的的row_length是20,抱着"打破砂锅问到底"的求学精神,所以想通过 gdb 调试源码的方式看这个row_length为什么是20.

GDB 调试 Mysql 实战(一)源码编译安装

2019-02-15
阅读 2 分钟
5k
下载源码 {代码...} 编译安装 安装依赖 {代码...} 需要注意的一点,需要指定 boost 路径,会 cmake 的时候自动下载 {代码...} 最后程序安装到了/usr/local/mysql目录 创建专用用户 {代码...} 初始化数据库 {代码...} 连接数据库 {代码...} 原来是因为配置文件里面没有置顶客户端的 socket 文件 {代码...} 增加 {代码...}...

Mysql 使用 optimizer_trace 查看执行流程,分析、验证优化思路

2019-02-13
阅读 15 分钟
14.9k
该博客是我在看了《MySQL实战45讲》之后的一次实践笔记。文章比较枯燥,如果你在这篇文章看到一些陌生的关键字,建议你也一定要去做实验,只有做实验且验证了各个数据的由来,才能真正弄懂。

一个案例彻底弄懂如何正确使用 mysql inndb 联合索引

2018-11-18
阅读 3 分钟
3.2k
查看当时的监控情况 cpu 使用率是超过了100%,show processlist看到很多类似的查询都是处于create sort index的状态。

PHP 源码探秘 - 在解析外部变量时的一个 BUG

2018-11-18
阅读 6 分钟
3.4k
安利 原文:我的个人博客 [链接]工作了两三年,技术停滞不前,迷茫没有方向,安利一波我的直播 PHP 进阶之路 bug 复现 有个朋友跟我描述了一个bug,要我帮看看是什么情况。原本他有一个表单,如下。 {代码...} 但是有一个前端插件会动态插入两个input,最后ajax提交的时候是 {代码...} 后端 当我们用 php 来接收的时候 {...

使用 rails/jquery-ujs 来编写非侵入式的 js 模板代码

2018-01-26
阅读 9 分钟
2.8k
惯例安利一波我的后端 php 直播课。很多工程师在工作1~3年的时候最容易遇到瓶颈,不知道自己应该学习什么,面试总是吃闭门羹。那么 PHP 后面应该怎么学呢?《PHP 进阶之路》

PHP 高级面试题 - 如果没有 mb 系列函数,如何切割多字节字符串

2018-01-05
阅读 2 分钟
6.8k
原文请关注我的博客 [链接]很多工程师在工作1~3年的时候最容易遇到瓶颈,不知道自己应该学习什么,面试总是吃闭门羹。那么 PHP 后面应该怎么学呢?安利一波我的系列直播 PHP 进阶之路

为什么鸟哥说 int 再怎么随机也申请不到奇数地址

2017-12-25
阅读 4 分钟
10k
需要字节对齐的根本原因在于CPU访问数据的效率问题。因为CPU每次都是从以4字节(32位CPU)或是8字节(64位CPU)的整数倍的内存地址中读进数据的。(更深入的原因,谁告知下),如果不对齐的话,很有可能一个4字节int需要分两次读取。具体演示看下面的实验。

PHP7.2、PHP7.1 性能对比

2017-12-03
阅读 8 分钟
19k
直播好久没有曝光量了,自荐一波《PHP进阶之路》(PHPer们,好久没有投资自己了呢?)原文地址 [链接] PHP7.2 更新内容[链接]从官方给的文档中,我似乎没有看到关于整体性能方面的修改。 鸟哥点评 PHP7.2 相对于 PHP7.1 主要优化也是在 opcache 。 服务器配置 {代码...} 安装 {代码...} {代码...} {代码...} php.ini 配...