自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (2)
  • 收藏
  • 关注

原创 python watchfiles类-watch功能

观察当前目录发生更新的文件,并进贤输出。

2023-08-03 15:14:18 319

原创 python实现连接池的简易代码

#coding:utf8import timeimport threadingclass Pool: def __init__(self,max): self._max = max self._connections = 0 self._lock = threading.Condition() self._cache = [] def get(self): try:

2021-03-22 16:32:30 350

原创 centos6 系统slab内存一直线性增长

centos6 系统slab内存一直线性增长一、问题描述二、 问题追踪1).查看各进程占用的内存情况2). 查看内存使用分布情况a). 运行```cat /proc/meminfo```命令查看内存使用分布情况。b). 运行```slabtop```查看slab分布。c).查看slab dentry状态。d).strace追踪三、解决办法1). 通过脚本修改内核参数,定时清理空间。但这种办法治根不治本,笔者不太推荐。2). 升级到更高版本的nss版本。3). 目前很多网站的https采用openssl密码库

2020-07-09 11:26:19 1235

原创 PHP - 类自动加载机制

PHP类自动加载机制被广泛运用到各个PHP框架中,在面向对象开发中,使用一套自动加载机制来管理我们的类库将会非常方便,从而减少使用前逐个引入包文件的痛苦。PHP提供了两种注册自动加载的方式:__autoload 和 spl_autoload_register。下面将介绍这两个函数在PHP的实现。__autoload 当我们在PHP脚本定义__autoload函数时,PHP在编译阶段调用zend_d

2017-01-15 10:58:36 699

原创 PHP - FPM信号机制

熟悉PHP-FPM的童鞋应该都知道它采用master/worker多进程架构设计,我们可以通过执行"xxx/sbin/php-fpm stop"或"xxx/sbin/php-fpm reload"停止或重新加载fpm。那么它究竟是怎样运作呢?简单来说,其运用了信号机制来实现相应的功能。当我们执行"stop"命令时,系统向fpm进程发送停止信号,当我们执行"reload"命令时,系统向fpm进程发送SIGUSR

2017-01-06 20:50:32 2105

原创 PHP - 垃圾回收机制

关于PHP垃圾回收机制(简称GC),网上已经有很多相关资料。之所以决定写这篇文章,主要是为了加深自己对PHP垃圾回收机制的理解。当然,如果能帮助到其他人理解,也不失为一件快事。 PHP5.3及以上版本使用了新垃圾回收机制。我们可以通过修改php.ini配置开启或关闭GC机制(默认是打开状态)。zend.enable_gc = OnGC数据结构typedef struct _gc_root_buff

2016-12-31 21:33:09 702

原创 Redis2.6 - publish/subscribe的BUG

前一段时间由于业务需要,我们需要搬迁服务器到新机房。为了保证系统平滑过渡,我们分成多批搬迁。迁移工作总体还算顺利,期间也遇到了一点点小挫折。下面将介绍我印象最为深刻的一个BUG:redis2.6的publish/subscribe。进入主题,首先介绍下业务场景及问题。业务场景我们生产环境使用的redis是2.6版本,redis集群只有两台服务器,一主(A)一从(B)。 制定的redi

2016-12-30 20:19:41 1312

原创 PHP - 内存管理

前面几篇文章主要介绍PHP-FPM,沿着”FPM运行原理->运行模式->进程管理->定时事件”方向,我们对FPM已经有了一个较为深刻的认识。今天这篇文章将介绍PHP的另一核心功能,内存管理。很多开源软件都有一套自己维护的内存管理体系,例如,nginx。php作为世界上“最好”的语言,当然也不例外。PHP内存管理功能,简单来说,就是申请一块大的内存来管理自己的内存结构;代码非常之精巧,其使用“内存对齐

2016-12-25 15:24:53 762

原创 PHP-max_execution_time与fpm.request_terminate_timeout介绍

前段时间一位同事跟我说php脚本超时时间以fpm配置优先。经过自己测试后,其实不然,上面的观点只是在某些情况下成立。php脚本超时时间可以在php.ini的max_execution_time和fpm.conf的request_terminate_timeout参数两处进行设置.那么这两者有什么区别呢?当我们设置php.ini的max_execution_time参数后,zend引擎处理脚本时,其内

2016-12-17 17:30:53 7676 1

原创 PHP源码分析 - PHP-FPM定时事件

PHP-FPM分别使用IO和定时两种事件来保证系统流畅的运转。IO事件负责收集客户端请求、主进程及子进程信号等操作。定时事件负责辅助型任务的处理,其内部定义fpm_pctl_perform_idle_server_maintenance_heartbeat 和 fpm_pctl_heartbeat两个定时事件,fpm_pctl_perform_idle_server_maintenance_hea

2016-12-07 11:57:16 1121

原创 PHP源码分析 - PHP-FPM scoreboard模块介绍

fpm_scoreboard(以下简称scoreboard模块)是PHP-FPM核心功能之一,源码位于sapi/fpm/fpm_scoreboard.c。从字面意思理解是一个”记分器”,也就是说它是一个类似统计功能的模块。网上关于这方面的资料较少,经过不断地反复阅读以及推敲,脑海中已经有了一个比较清晰的轮廓。scoreboard模块定义fpm_scoreboard_s和fpm_scoreboard_

2016-11-30 21:56:39 2495

原创 PHP源码分析 - PHP-FPM运行模式详解

前篇文章已经介绍PHP-FPM的运行原理。本文将细说PHP-FPM的运行模式。实际上,在上一篇文章简单提到过FPM运行模式,之所以把这块内容拉出单独讲解,笔者认为它是一个值得学习及借鉴的地方。FPM支持static、ondemand、dynamic三种运行模式。我们可以通过修改php-fpm.conf配置文件中的pm参数进行设置.static模式static:又称静态模式,该模式比较容易理解,即启动

2016-11-30 10:42:27 1821

原创 PHP源码分析 - PHP-FPM运行原理

其实很早之前就有想过阅读PHP源码,主要还是自己比较懒散,意志不够坚定,一直无法静下心。最近不是很忙,趁着“短暂”的闲暇之余,翻看尘封已久的“PHP源码”文件。我们知道web服务器与PHP应用之间通过SAPI接口进行交互数据。PHP提供了多种SAPI接口,例如 apache2hander、fastcgi、cli等等。当然,php-fpm也是其中一种。相比其他结构,php-fpm运用更加广泛,这

2016-11-23 21:11:15 14534 4

原创 CodeIgniter-内部运行流程

每当我们阅读一个优秀的框架/项目时,先要理清它的整个运行流程,才能掌握和理解它的真正设计含义。CodeIgniter(简称:CI)作为一款优秀的轻量级PHP框架,其特点:简洁又不失灵活。它的内部运作原理又是怎样的呢?CI的入口文件为index.php,核心代码位于system/Core/CodeIgniter.php.以下为笔者整理的CI运行流程图及部分主要模块的说明。初始化系统运行环境 a).

2016-11-19 19:43:43 830

原创 CodeIgniter-&引发关于变量引用的思考

CodeIgniter是一个单例模式框架,源代码中大量使用‘&’引用,有两种原因:一方面基于兼容PHP4版本;另一方面是为了防止变量发生”写时复制”(copy on write)。借此机会,简单地介绍“PHP变量引用”原理。PHP源码使用zval结构定义变量:typedef struct _zval_struct zval;struct _zval_struct { zvalue_valu

2016-11-19 10:43:41 481

原创 CodeIgniter-Security的CSRF hash生成功能

Security/get_random_bytes()的功能是随机生成字符串,用于crsf验证的hash值。```phppublic function get_random_bytes($length){if (empty($length) OR ! ctype_digit((string) $length)){return FALSE;}// Unfort

2016-11-11 11:57:26 617

原创 CodeIgniter-Router的BUG(3.0.0版本)

好久没有更新Blog了,前一段时间在研究nginx源码。相比redis,nginx的代码量要多几倍,结构也比较复杂,稍后将补充nginx的源码分析。在研究nginx的同时,笔者也开始着手阅读CodeIgniter源码。CodeIgniter是一款非常流行且轻量级的框架。CodeIgniter,设计灵活,扩展性强,低耦合。在阅读源码CodeIgniter3.0.0的时候,笔者发现Router.php的

2016-11-05 20:56:05 775

原创 linux僵尸进程

定义僵死进程是指子进程退出时,父进程并未对其发出的SIGCHILD信号进行适当处理,导致子进程停留在僵死状态等待其父进程为其收尸,这个状态下的子进程就是僵死进程。实例#include<stdio.h>#include<stdlib.h>#include<error.h>int main(int argc,char *argv[]){ int pid,i; pid =

2016-09-18 16:38:10 545

原创 redis源码分析-intset(整型集合)

intset,一种特殊的set数据结构,由多个整型元素组成。intset也是一个有序整型集合,其内部设计非常精巧。intset数据结构与往常一样,先了解intset数据结构:typedef struct intset { uint32_t encoding; uint32_t length; int8_t contents[];} intset;intset结构由encod

2016-08-13 10:24:37 3822 1

原创 python之sched

sched是python的任务调度类库。所谓任务调度,就是根据任务的先后及优先级顺序执行。sched的使用这里就不介绍了,大家可以参考官方文档(https://docs.python.org/2.6/library/sched.html)。本文的重点将介绍sched的内部运作原理。sched内部原理sched是类库的名称,实际上,sched内部封装了一个scheduler类,用于负责任务的新增、取消

2016-08-02 09:15:34 1272

原创 redis源码分析-ziplist(压缩链表)

ziplist结构在redis运用非常广泛,是列表、字典等数据类型的底层结构之一。ziplist的优点在于能够一定程度地节约内存。ziplist构成ziplist结构由zip_header、zip_entry、zip_end三部分组成。ZIP_HEADER:顾名思义,压缩列表的头部。内部包含ZIP_BYTES、ZIP_TAIL、ZIP_LENGTH属性。

2016-07-31 11:20:39 1607

原创 redis源码分析-dict(字典结构)

—、简介众所周知,字典是采用哈希表结构实现的。redis也不例外,代码位于dict.c 和 dict.h。为了解决hash键冲突的问题,redis采用“拉链式”进行设计。 由于网上有大量的hash结构及相关操作说明,笔者将不再介绍。本文的重点主要讲解dict的数据结构、运作流程及rehash实现。二、数据结构redis字典由dictEntry(节点)、dictType(类型)、dic

2016-07-18 21:18:57 756

原创 redis源码分析-adlist(链表)

一、介绍上一节,介绍了sds结构,接下来将介绍下redis的adlist(又称链表).redis的链表采用双向链表方式进行实现,代码位于src/adlist.h、src/adlist.c .二、数据结构C语言数据结构中双向链表结构由节点(listNode)、迭代器(listIterator)、容器(list)组成,redis也是如此。节点typedef struct listNode {

2016-07-10 17:22:59 547

原创 redis源码分析-sds字符串

介绍等待简易动态的sds字符串1.介绍在c语言中,一般使用char*定义字符串类型,但redis却采用sds结构保存字符串。那么redis为什么弃用char而改用sds呢?这样做是基于哪方面的考虑?这样做的优点又有哪些呢?2.char与sds比较首先,回到原点,我们看下sds的数据结构(以下为3.0版本代码)。struct sdshdr { int len

2016-07-04 21:25:19 538

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除