top命令详解(转载)

简介
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.

下面详细介绍它的使用方法。

参数含义
复制代码
top – 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
复制代码

统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:

01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

复制代码
total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
Cpu(s):
0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0%hi:硬件CPU中断占用百分比
0.0%si:软中断占用百分比
0.0%st:虚拟机占用百分比
复制代码

最后两行为内存信息。内容如下:

复制代码
Mem:
191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap:
192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
复制代码

进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

复制代码
序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h
复制代码

默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。

更改显示内容通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。

命令使用
top使用格式

top [-] [d] [p] [q] [c] [C] [S] [s] [n]

参数说明

复制代码
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
复制代码

其他实用命令
下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。

复制代码
Ctrl+L 擦除并且重写屏幕。
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
复制代码

附常用操作:

top //每隔5秒显式所有进程的资源占用情况
top -d 2 //每隔2秒显式所有进程的资源占用情况
top -c //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数

发表在 bash | 留下评论

yaf、yac、yaconf、swoole安装

wget http://pecl.php.net/get/yaf-3.0.3.tgz
tar zxvf yaf-3.0.3.tgz
cd yaf-3.0.3
~/local/php-7.0.9/bin/phpize
 ./configure --with-php-config=/home/users/yourname/local/php-7.0.9/bin/php-config
vim ~/local/php-7.0.9/etc/php.ini

php.ini加so文件

vim ~/local/php-7.0.9/etc/php.ini
[yaf]
extension="yaf.so"

php7 --ri yaf

yaf

yaf support => enabled
Version => 3.0.3
Supports => http://pecl.php.net/package/yaf

Directive => Local Value => Master Value
yaf.library => no value => no value
yaf.action_prefer => Off => Off
yaf.lowcase_path => Off => Off
yaf.use_spl_autoload => Off => Off
yaf.forward_limit => 5 => 5
yaf.name_suffix => On => On
yaf.name_separator => no value => no value
yaf.st_compatible => Off => Off
yaf.environ => product => product
yaf.use_namespace => Off => Off

同理安装yac、yaconf
wget http://pecl.php.net/get/yac-2.0.1.tgz
wget http://pecl.php.net/get/yaconf-1.0.2.tgz
wget http://pecl.php.net/get/swoole-1.8.7.tgz

发表在 php | 留下评论

安装php7

wget http://cn2.php.net/get/php-7.1.0.tar.gz/from/this/mirror
tar -zxvf php-7.1.0.tar.gz 
cd php-7.1.0
./configure --prefix=/Users/wenzg/local/php --enable-fpm --with-openssl=/usr/local/opt/openssl --with-gd --enable-sockets --enable-sysvsem --with-curl --with-mcrypt=/usr/local/Cellar/mcrypt/2.6.8 --with-xmlrpc --enable-zip --enable-soap --with-pdo-mysql --with-mysqli --enable-pcntl --enable-zip --enable-mbregex --enable-mbstring --enable-ftp --with-jpeg-dir
make test
make && make install
bin/php -v
bin/php -m
发表在 php, 未分类 | 留下评论

redis安装

安装

 1013  2016-07-21 22:27:46 wget http://download.redis.io/releases/redis-3.2.1.tar.gz
 1021  2016-07-21 22:31:31 tar xzf redis-3.2.1.tar.gz 
 1023  2016-07-21 22:32:37 cd redis-3.2.1
 1025  2016-07-21 22:33:11 make PREFIX=/home/users/youname/local/redis-3.2.1 install
 1034  2016-07-21 22:39:14 vim run.sh
 1037  2016-07-21 22:41:03 mkdir conf pids
 1040  2016-07-21 22:41:20 mv redis.conf* conf/
 1046  2016-07-21 22:41:43 sh run.sh start
 1048  2016-07-21 22:42:15 mv conf/redis.conf conf/9527.conf
 1049  2016-07-21 22:42:18 sh run.sh start
 1050  2016-07-21 22:42:34 netstat -tunpl |grep 9527

编写启动脚本

#!/bin/sh  
#chkconfig: 2345 80 90  
# Simple Redis init.d script conceived to work on Linux systems  
# as it does use of the /proc filesystem.  

REDISPORT=9527
EXEC=/home/users/youname/local/redis-3.2.1/bin/redis-server
CLIEXEC=/home/users/youname/local/redis-3.2.1/bin/redis-cli

PIDFILE=/home/users/youname/local/redis-3.2.1/pids/redis_${REDISPORT}.pid
CONF="/home/users/youname/local/redis-3.2.1/conf/${REDISPORT}.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"  
        else
                echo "Starting Redis server..."  
                $EXEC $CONF &
        fi
        ;;
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"  
        else
                echo "Starting Redis server..."  
                $EXEC $CONF &
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"  
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."  
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."  
                    sleep 1
                done
                echo "Redis stopped"  
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"  
        ;;
esac

配置文件修改

port 9527
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize yes
pidfile /home/users/v_haowenzhi/local/redis-3.2.1/pids/redis_9527.pid

简单测试

redis-3.2.1]$ bin/redis-cli -p 9527
127.0.0.1:9527> set pwd asdasd
OK
127.0.0.1:9527> get pwd
"asdasd"
发表在 redis | 留下评论

PHP-Resque(转载)

Resque 是 Github 基於 Redis 開發的 background job 系統。相較其他肥大的 queue 系統, Resque 的設計真的非常單純簡潔,充分利用 Redis 的特性。更多介紹可以看原作者的 Blog
PHP-Resque 是把 Resque porting 到 PHP 的專案。使用和 原本 Resque 一樣的概念和設計。甚至連 Redis 的 key 命名都一樣,因此也可以使用 Ruby 版本的 resque-web 來監控 PHP-Resque 的運行狀況。
設計
Resque 的設計有兩個角色: Job 和 Worker。 每個 Job 都是定義成類別,新增 Job 的時候會將 Job 的類別和相關參數 json_encode 後儲存到不同的 queue 裡面,而 Worker(s) 則會依序從 redis 讀取 Job 出來執行。

#!/bin/bash
export APP_INCLUDE=resque/require.php
export QUEUE=*
export COUNT=1
export VVERBOSE=1 # for debugging
export REDIS_BACKEND=localhost:6379
. /etc/rc.d/init.d/functions
 
start() {
    /usr/bin/php ../lib/sdk/php-resque/resque.php
}
 
stop() {
    ps -ef | grep resque | grep -v grep | grep -v resque-web | awk '{print $2}' | xargs kill -15
}
kill() {
    ps -ef | grep resque | grep -v grep | grep -v resque-web | awk '{print $2}' | xargs kill -9
}
case "$1" in
    start)
         number=$(ps aux | grep php-resque/resque.php | grep -v grep | wc -l)
        if [ $number -gt 0 ]
        then
          echo "php-resque is running. ($number workers)"
          echo "You may wanna stop them before you start."
        else
          start
        fi
    ;;
 
    stop)
        stop
    ;;
 
    kill)
        kill
    ;;
 
    status)
        number=$(ps aux | grep php-resque/resque.php | grep -v grep | wc -l)
        if [ $number -gt 0 ]
        then
          echo "php-resque is running. ($number workers)"
        else
          echo "php-resque is not running."
        fi
    ;;
 
    *)
        echo -n "Usage: $0 {start|stop|status}"
esac

原文链接:

http://blog.hsatac.net/2012/01/php-resque-introduction/

http://601502546.blog.163.com/blog/static/259610762013112851935276/

发表在 消息队列 | 留下评论

php-cgi、fastcgi、php-fpm都什么玩意儿

首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。

web server(比如说nginx)只是内容的分发者。比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。好了,如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。Nginx会传哪些数据给PHP解析器呢?url要有吧,查询字符串也得有吧,POST数据也要有,HTTP header不能少吧,好的,CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。仔细想想,你在PHP代码中使用的用户从哪里来的。

当web server收到/index.php这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。
好了,CGI是个协议,跟进程什么的没关系。那fastcgi又是什么呢?Fastcgi是用来提高CGI程序性能的。

提高性能,那么CGI程序的性能问题在哪呢?”PHP解析器会解析php.ini文件,初始化执行环境”,就是这里了。标准的CGI对每个请求都会执行这些步骤(不闲累啊!启动进程很累的说!),所以处理每个时间的时间会比较长。这明显不合理嘛!那么Fastcgi是怎么做的呢?首先,Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理。
那PHP-FPM又是什么呢?是一个实现了Fastcgi的程序,被PHP官方收了。

大家都知道,PHP的解释器是php-cgi。php-cgi只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理(皇上,臣妾真的做不到啊!)所以就出现了一些能够调度php-cgi进程的程序,比如说由lighthttpd分离出来的spawn-fcgi。好了PHP-FPM也是这么个东东,在长时间的发展后,逐渐得到了大家的认可(要知道,前几年大家可是抱怨PHP-FPM稳定性太差的),也越来越流行。

摘抄自:https://segmentfault.com/q/1010000000256516

发表在 概念名词 | 留下评论

归并排序(转载)


转载自:https://blog.phpha.com/backup/archives/1683.html

发表在 algorithm | 留下评论

gzip用法

linux下gzip的压缩详解
Linux压缩保留源文件的方法:
gzip –c filename > filename.gz
Linux解压缩保留源文件的方法:
gunzip –c filename.gz > filename
gunzip的用法
1.作用
gunzip命令作用是解压文件,使用权限是所有用户。
2.格式
gunzip [-acfhlLnNqrtvV][-s ][文件...]
或者gunzip [-acfhlLnNqrtvV][-s ][目录]
3.主要参数
-a或–ascii:使用ASCII文字模式。
-c或–stdout或–to-stdout:把解压后的文件输出到标准输出设备。
-f或-force:强行解开压缩文件,不理会文件名称或硬连接是否存在,以及该文件是否为符号连接。
-h或–help:在线帮助。
-l或–list:列出压缩文件的相关信息。
-L或–license:显示版本与版权信息。
-n或–no-name:解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其忽略不予处理。
-N或–name:解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到解开的文件上。
-q或–quiet:不显示警告信息。
-r或–recursive:递归处理,将指定目录下的所有文件及子目录一并处理。
-S或–suffix:更改压缩字尾字符串。
-t或–test:测试压缩文件是否正确无误。
-v或–verbose:显示指令执行过程。
-V或–version:显示版本信息。

发表在 bash | 留下评论

cros小demo

index.html














upload.php

 0, 'error' => '', 'message' => 'request ok') );
	echo 'request data: ' . print_r( getallheaders(), true );
}
发表在 跨域解决方案 | 留下评论

QPS 与 TPS 简介

QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

TPS是 TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器 做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息来估计得分。客户机使 用加权协函数平均方法来计算客户机的得分,测试软件就是利用客户机的这些信息使用加权协函数平均方法来计算服务器端的整体TPS得分。

发表在 概念名词 | 留下评论