- 浏览: 59580 次
- 性别:
- 来自: 深圳
最新评论
文章列表
1、cmd 查看网络端口:netstat -ano
第一列是协议、第二列是内部地址、第三列是外部地址、第四列是状态、第五列是PID
查看特定的网络端口:netstat -ano | findstr "端口号"
2、cmd根据pid查看具体的程序: tasklist | findstr "PID"
3、Apache的ab压力测试样例:
ab -c 10 -n 100 http://a.ilanni.com/index.php
-c 10表示并发用户数为10
-n 100表示请求总数为100
http:// ...
nginx安装第三方模块
- 博客分类:
- nginx
如何安装nginx第三方模块(已经安装nginx和未安装nginx的2种情况)
举例说明:安装第三方的ngx_cache_purge模块(用于清除指定URL的缓存),nginx安装目录假设在/usr/local/nginx
下载解压:
wget http://labs.frickle.com/files/ngx_cache_purge-2.0.tar.gz
tar -zxvf ngx_cache_purge-2.0.tar.gz(目录:/usr/local/src/)
进入nginx源码目录(/usr/local/src/nginx/)
cd /usr/local/nginx ...
php执行流程相关
- 博客分类:
- php面向对象学习--基础篇
通常,解释型语言使用前被编译为字节码,虚拟机动态执行字节码。为了提高性能,虚拟机执行代码时,可以利用 JIT 技术来动态的把字节码翻译成机器码。
因为字节码它不可能脱离虚拟机运行,因此它依旧是解释型语言。
简而言之,编译型语言的编译(编译到机器码)发生在运行之前,解释型语言的编译发生在每一次运行时。
PHP是解释型语言,将PHP代码解释为opcode之后再交由Zend引擎执行。
php先编译后执行(这里只PHP语言引擎Zend执行过程,不包含Web服务器的执行过程)
1.code通过zend_complie_file()来编译,其中包括词法(lex词法编译器去除空 ...
php的异步非阻塞开发
- 博客分类:
- php面向对象学习--基础篇
同步、异步
阻塞、非阻塞
多进程、多线程(php是多进程单线程)
同步:在发出一个功能调用时,在没有得到结果之前,该调用就不返回,也就是必须一件一件事做,等前一件做完了才能做下一件事
异步:当一个异步过程调用发出后,调用者不能立刻得到结果,实际处理这个调用的请求在完成后,通过状态、通知和回调来通知调用者。
阻塞:指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)
非阻塞:在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回
centos的mongodb安装和php扩展
- 博客分类:
- linux
第一步:下载MongoDB安装包
MongoDB的官网:http://www.mongodb.org 找到相应的版本下载。
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.4.tgz
tar -zxvf mongodb-linux-x86_64-2.4.4
第二步: 安装准备
我们把下载下载的压缩包解压过后,为了方便我们就给他重命名一下.
mv mongodb-linux-x86_64-2.4.4 mongodb
然后,拷贝到 /usr/local/mongodb
cp -R mo ...
nginx中php-fpm的status查看
- 博客分类:
- nginx
查看php-fpm的status
说明:php-fpm和nginx一样内建了一个状态页,对于想了解php-fpm的状态以及监控php-fpm非常有帮助
第一步:开启php-fpm配置文件中的pm.status_path,默认是没有开启,去掉前面的;即可开启
pm.status_path = /status
第二步:在nginx中需要查看php-fpm状态的server中添加重定向的location(location除了url之外,因为后面使用该url来访问查看状态,其他的fastcgi配置可以自增减,只要能保证nginx能与php-fpm连接即可)
location ~ ...
nginx中php-fpm的多进程池
- 博客分类:
- nginx
php-fpm多个进程池
说明:
每个池使用不同的配置,各个池之间互不干涉。默认情况下,PHP 只启用了一个池,所有请求均在这个池中执行。一旦某些请求出现拥堵之类的情况,那么很可能会连累整个池出现问题;如果启用多个池,那么可以把请求分门别类放到不同的池中执行,此时如果某些请求出现拥堵之类的情况,那么只会影响自己所在的池,从而控制故障的波及范围。
设置多个进程池,每个进程池分配不同的站点,可以做到一个站占用资源过多导致其它站也不能访问的尴尬情况。这使得网站可以更好的运行,如果某个站点受到少量CC攻击,也不至于拖跨所有的站点
第一步:php-fpm的配置:
在php-fpm.con ...
配置项的格式:配置项名称 配置项值1 配置项值2 ···· ;
配置名称必须是nginx中的某一个模块能够处理的,否则nginx会出现非法配置名的错误
配置值中如果出现语法符号,例如空格、变量等,使用单引号或者双引号括起来
第一类:用于调试和定位问题的配置项
1.daemon on|off 默认是on
是否以守护进程方式允许
2.master_process on|off 默认on
是否以一个master进程和多个worker进程的方式允许,如果off则不会fork出多个worker,而是一个master执行所有的请求
3.error日志设置
erro ...
情况:高并发下,请求a所在的php-fpm进程顺利访问到资源,但是还没有执行完毕,请求b一直没能获得可用的php-fpm进程,此时请求b就会被返回504的错误,
如果此时过多的504和其他问题导致整个fpm、nginx出现问题,那么还没有执行完毕的php-fpm进程所在的请求a就会出现502错误(因为进程被终止了)
Nginx 502 Bad Gateway的含义是请求的PHP-CGI(这里使用的是php-fpm)已经执行,但是由于某种原因(一般是读取资源的问题)没有执行完毕而导致PHP-CGI进程终止(执行中php-fpm进程挂掉了的意思)。
一般Nginx 502 Bad G ...
centos的ssh服务
- 博客分类:
- linux
ssh服务
1.简单tcp服务: tcpdump -i eth0 -nnX port 21 (监听eth0网络下的端口为21的ftp服务)
2.非对称加密:
公钥:用来加密
私钥:用来解密
3.ssh既可以是客户端也可以是服务端,当你用ssh去连接其他服务器时候,你本身就是客户端,使用的就是客户端的配置文件,如果你是被连接的,则为服务器端
所有有两个配置文件:/etc/ssh/ssh_config (客户端配置文件)、/etc/ssh/sshd_config(服务器)
4.服务器配置文件部分说明:
普通部分:
Port 22 ...
将已有的代码目录作为仓库新增到git中:
进入到代码目录中
git init
git add README.md (如果需要才进行该命令)
git commit -m "first commit" (如果上一个命令执行了才进行该命令)
git remote add origin 你的git仓库地址(ssh或者https格式都可以,如果没有该新仓库,则需要手动先新建)
git add .
git commit -m '新增代码'
git push -u origin master
检出远端到本地:
nginx是一个web服务器,因此nginx的access日志只有对访问页面的记录,不会有php 的 error log信息。
nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog
原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出,直接把他们重定向到/dev/null,所以我们在nginx的error log 和php-fpm的errorlog都看不到php的错误日志。
调试起来就很 ...
redis 惊群的处理
- 博客分类:
- redis
缓存惊群现象,在各种缓存中都会存在这种现象,这里以Redis为例,提供一种解决思路,留作参考~
首先,所谓的缓存过期引起的“惊群”现象是指,在大并发情况下,我们通常会用缓存来给数据库分压,但是会有这么一种情况发生,那就是当一个缓存数据失效之后会导致同时有多个并发线程去向后端数据库发起请求去获取同一个数据,这样如果在一段时间内同时生成了大量的缓存,然后在另外一段时间内又有大量的缓存失效,这样就会导致后端数据库的压力突然增大,这种现象就可以称为“缓存过期产生的惊群现象”!
代码如下:
/**
* 获取缓存
* @param $key str ...
Redis相对Memcached来说功能和特性上的优势已经很明显了。
而对于性能,Redis作者的说法是平均到单个核上的性能,在单条数据不大的情况下Redis更好。为什么这么说呢,理由就是Redis是单线程运行的。
因为是单线程运行,所以和Memcached的多线程相比,整体性能肯定会偏低。
因为是单线程运行,所以IO是串行化的,网络IO和内存IO,因此当单条数据太大时,由于需要等待一个命令的所有IO完成才能进行后续的命令,所以性能会受影响。
而就内存使用上来说,目前Redis结合了tcmalloc和jemalloc两个内存分配器,基本上和Memcached不相伯仲 ...
MySQL支持RANGE,LIST,HASH,KEY分区类型,其中以RANGE最为常用:
Range(范围)–这种模式允许将数据划分不同范围。例如可以将一个表通过年份划分成若干个分区。
Hash(哈希)–这中模式允许通过对表的一个或多个列的Has ...