最新 | 最热门 | 最高评价

+0  记几个常见的Laravel报错

Tag: Technical | PHP
老王 发于 2016年02月29日 18:17 | 点击: 292 | 展开摘要
我已经用了一段时间的 Laravel 框架了,期间遇到了不少问题,有一些调试起来着实不太容易,本文筛选出几个,如果能让大家少走一些弯路,那我就算没白写。

报错:「Can’t swap PDO instance while within transaction」

通过查询 Laravel 源代码,可以确认异常是在 setPdo 方法中抛出的:

<?php

public function setPdo($pdo)
{
if ($this->

查看全文: http://www.udpwork.com/item/15968.html

+0  被黑了

Tag: Technical | Linux
老王 发于 2016年03月07日 19:18 | 点击: 195 | 展开摘要
话说从前些天开始,我的某台服务器不时会出现外网访问响应速度变慢的情况,不过内网访问倒是一直正常。因为并不是核心服务器,所以一开始我便忽略了监控报警,但是随着服务器的可用性越来越差,我不得不腾出手来看看到底发生了什么。

既然是网络问题,那么可以在客户端用「mtr <IP>」检查一下网络情况:

mtr

发现丢包主要发生在最后一跳,接着可以在服务器用「sar -n DEV」检查带宽:

sar

明显可见 TX 流量时不时便会到达一定的高峰,说明服务器在向外发送大

查看全文: http://www.udpwork.com/item/15967.html

+0  PostgreSQL Partial Index

Tag: Technical | PostgreSQL
老王 发于 2016年04月28日 16:50 | 点击: 196 | 展开摘要
说起「Partial Index」,估计很多人没听说过。在 PostgreSQL 中,它的含义是指:通过查询条件索引选定的行,而不是所有的行。虽然 MySQL 也有此概念,但是其更接近前缀索引的含义:比如你想索引一个 VARCHAR(255) 的字段,根据数据分布情况,你可以仅索引前面若干个字符,如此通过降低索引体积来达到提升性能的目的。

例一:

有一个 users 表,里面有一个 mobile 字段,缺省值为 null。用户可以不填写手机号,如果填写,每个手机号只能关联

查看全文: http://www.udpwork.com/item/15966.html

+0  如何正确发布PHP代码

Tag: Technical | PHP
老王 发于 2016年05月27日 20:47 | 点击: 280 | 展开摘要
几乎每一个 PHP 程序员都发布过代码,可能是通过 ftp 或者 rsync 同步的,也可能是通过 svn 或者 git 更新的。一个活跃的项目可能每天都要发布若干次代码,但是现实却是很少有人注意其中的细节,实际上这里面有好多坑,很可能你就在坑中却浑然不知。

一个正确实现的发布系统至少应该支持原子发布。如果说每一个版本都表示一个独立的状态的话,那么在发布期间,任何一次请求只能在单一状态下被执行。如此称之为支持原子发布;反之如果在发布期间,一次请求跨越不同的状态,那么就不能称

查看全文: http://www.udpwork.com/item/15965.html

+0  EAV or JSON

Tag: Technical | MySQL
老王 发于 2016年06月29日 20:18 | 点击: 481 | 展开摘要
MongoDB 之类的 NoSQL 之所以流行,很大程度上取决于相对自由的 schema 设计,不管数据量多大,可以随时在线上环境添加新字段来保存新数据,而这种能力恰恰是传统的关系数据库所欠缺的,不过别担心,传统关系数据库有自己的应对之道。我们今天就讨论一下其中最具代表性的两种方法,看看孰优孰劣。

在讨论前,我们不妨虚拟一个业务场景:假设我们要做一个类似汽车之家的产品库,首当其冲的是如何保存汽车的各种属性,比如说:长度、宽度、高度、GPS 导航系统、倒车影像、上坡辅助、陡坡

查看全文: http://www.udpwork.com/item/15964.html

+0  记录一个多核CPU负载不均衡问题

Tag: Technical | Linux | PHP
老王 发于 2016年07月19日 21:07 | 点击: 359 | 展开摘要
昨晚和一位读者朋友讨论了一个问题:在一台多核 CPU 的 Web 服务器上,存在负载不均衡问题,其中 CPU0 的负载明显高于其它 CPUx,进一步调查表明 PHP-FPM 的嫌疑很大。话说以前我曾经记录过软中断导致过类似的问题,但是本例中可以排除嫌疑。

让我们在一台四核服务器上采样分析一下数据确认看看是否存在负载不均衡问题:

shell> mpstat -P ALL 1 10

CPU %usr %nice %sys %iowait %irq

查看全文: http://www.udpwork.com/item/15963.html

+0  白话火焰图

Tag: Technical | Linux | Performance
老王 发于 2016年08月18日 13:44 | 点击: 251 | 展开摘要
很多人感冒发烧的时候,往往会模仿神农氏尝百草的路子:先尝尝抗病毒的药,再试试抗细菌的药,甭管家里有什么药挨个试,什么中药西药,瞎猫总会碰上死耗子,如此做法自然是不可取的,正确的做法应该是去医院验个血,确诊后再对症下药。

让我们回想一下我们一般是如何调试程序的:通常是在没有数据的情况下依靠主观臆断来瞎蒙,而不是考虑问题到底是什么引起的!毫无疑问,调优程序性能问题的时候,同样需要对症下药。好消息是 Brendan D. Gregg 发明了火焰图,可以一针见血的指出程序的性能瓶颈

查看全文: http://www.udpwork.com/item/15962.html

+0  如何判断GCC的版本

Tag: Technical | Linux
老王 发于 2016年09月01日 14:53 | 点击: 838 | 展开摘要
我说的 GCC 版本可不是指的「gcc –version」,而是指的上到 Linux 内核,下到 PHP 之类的软件,是用哪个版本的 GCC 编译的。

先看看如何判断 Linux 内核是用什么版本的 GCC 编译的?

shell> cat /proc/version
... (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) ...

shell> /lib64/libc.so.6
GNU C

查看全文: http://www.udpwork.com/item/15961.html

+0  关于FIN_WAIT2

Tag: Technical | Linux | TCP
老王 发于 2016年09月05日 22:30 | 点击: 811 | 展开摘要
前些天,有朋友问我关于 FIN_WAIT2 的问题:如果主动关闭的一方在进入 FIN_WAIT2 状态后没有收到被动关闭的一方发送的 FIN 包,那么会怎样?

让我们热热身,通过一张旧图来回忆一下 TCP 关闭连接时的情况:

TCP Close

按照正常的状态迁移路径,当 FIN_WAIT2 收到 FIN 包后会迁移到 TIME_WAIT 状态。如果没有收到 FIN 包,那么连接状态会如何迁移,我们不妨测试一下:

#!/usr/bin/env python

impo

查看全文: http://www.udpwork.com/item/15960.html

+0  实战Pinba

Tag: Technical | PHP
老王 发于 2016年10月26日 16:33 | 点击: 370 | 展开摘要
谁都知道监控系统很重要,但是要自己搭建一套好用的系统却不是一件简单的事情。国内已经有不少厂商提供类似的服务,比如:OneAPM、听云,其原理就是通过在服务器上部署一套探针,把数据汇总上报,但是问题却不像说起来这么简单,我曾经买过国内某个厂商高大上的 APM 服务,谁知道它监控的指标太多了,并且无法自定义,结果导致一上线,系统性能就下降百分之二十,最后无奈只好放弃。

我想要的是一种对系统性能影响尽可能小的监控系统,它不需要监控太多指标,只要有 RPS、CPU、内存、响应时间等

查看全文: http://www.udpwork.com/item/15959.html

+0  一个PHP实现的ID生成器

Tag: Technical | PHP
老王 发于 2016年11月03日 20:03 | 点击: 347 | 展开摘要
通常来说,不管使用什么数据库,表里都有一个名为 id 的主键,既然是主键,那么必然要满足唯一性,对于 MySQL 用户来说,它多半是一个 auto_increment 自增字段,也有一些别的用户喜欢使用 UUID 做主键,不过对 MySQL(特别是 InnoDB)来说,UUID 通常不是一个好选择,因为聚簇索引要求物理数据按照主键排序,而 UUID 本身是无序的,所以会带来很多不必要的 IO 消耗。于是乎我们得到一个结论:ID 最好是顺序的唯一值。

如此说来,就用 MySQ

查看全文: http://www.udpwork.com/item/15958.html

+0  史上最LOW的在线DDL解决方案

Tag: Technical | MySQL | PostgreSQL
老王 发于 2016年11月23日 18:31 | 点击: 644 | 展开摘要
说起在线 DDL,最常见的操作莫过于在线加一个字段或者索引,不过如果数据量比较大的话,伴随而来的往往是长时间的等待,更要命的是系统在操作期间很可能会出现不可用的情况,所以一般只能等到凌晨操作,简直就是梦魇一般的存在。

在 PostgreSQL 中,如果注意使用方法,那么在线 DDL 并不是一个太难的事情。这里面说注意使用方法,指的是 PostgreSQL 跟其它一些数据库一样,在加字段或者索引的时候会锁住表,不过有一些技巧可以绕开此限制:

加字段:使用 ALTER TAB

查看全文: http://www.udpwork.com/item/15957.html
|<<<1234567>>>| 一共12页, 140条记录