linux 相关学习记录

(一)概念
① 物理CPU
实际Server中插槽上的CPU个数
物理cpu数量,可以数不重复的 physical id 有几个
② 逻辑CPU
/proc/cpuinfo 用来存储cpu硬件信息的
信息内容分别列出了processor 0 –processor n 的规格。这里需要注意,n是逻辑cpu数
一般情况,我们认为一颗cpu可以有多核,加上intel的超线程技术(HT), 可以在逻辑上再分一倍数量的cpu core出来
逻辑CPU数量=物理cpu数量 x cpu cores 这个规格值 x 2(如果支持并开启ht)
备注一下:Linux下top查看的CPU也是逻辑CPU个数
③ CPU核数
一块CPU上面能处理数据的芯片组的数量、比如现在的i5 760,是双核心四线程的CPU、而 i5 2250 是四核心四线程的CPU
一般来说,物理CPU个数×每颗核数就应该等于逻辑CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术
㈡ 查看CPU信息
当我们 cat /proc/cpuinfo 时、
具有相同core id的CPU是同一个core的超线程
具有相同physical id的CPU是同一个CPU封装的线程或核心
㈢ 下面举例说明
① 查看物理CPU的个数
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
2
② 查看逻辑CPU的个数
#cat /proc/cpuinfo |grep "processor"|wc -l
24
③ 查看CPU是几核
#cat /proc/cpuinfo |grep "cores"|uniq
6
我这里应该是2个Cpu,每个Cpu有6个core,应该是Intel的U,支持超线程,所以显示24

vmstat 命令

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个
是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

root@ubuntu:~# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0
2表示每个两秒采集一次服务器状态,1表示只采集一次。

实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:

复制代码
root@ubuntu:~# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 0
0 0 0 3499584 315836 3819660 0 0 0 0 88 158 0 0 100 0
0 0 0 3499708 315836 3819660 0 0 0 2 86 162 0 0 100 0
0 0 0 3499708 315836 3819660 0 0 0 10 81 151 0 0 100 0
1 0 0 3499732 315836 3819660 0 0 0 2 83 154 0 0 100 0
复制代码
这表示vmstat每2秒采集数据,一直采集,直到我结束程序,这里采集了5次数据我就结束了程序。

好了,命令介绍完毕,现在开始实战讲解每个参数的意思。

r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较
高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free 空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序
使用内存时,buffer/cached会很快地被使用。)

si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到
140000/s,磁盘写入速度差不多140M每秒

bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务
器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统
调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正
经事的时间少了,CPU没有充分利用,是不可取的。

us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt 等待IO CPU时间。

查看计划任务

一般用命令:crontab -l
  crontab命令简介:
  crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
  使用时可用参数:
  -e [UserName]: 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
  -r [UserName]: 删除目前的时程表
  -l [UserName]: 列出目前的时程表
  -v [UserName]:列出用户cron作业的状态


Linux中的计划任务

[日期:2014-09-05] 来源:Linux社区 作者:zebralinux [字体:大 中 小]
Linux的计划任务分为两类:

1,一次性执行:

常用命令:at, batch,依赖于atd服务

2,周期性执行:

常用命令:crontab,依赖于crond服务

一次性任务执行:

用法:

#at TIME

at> /bin/sync 输入需要执行的命令或脚本

at> “Ctrl+d” 输入Cry+d提交任务


TIME:的几种格式

#at now+3min 相对时间

#at 11:30 或是绝对时间

#at noon, midnight, teatime(4:00pm) 或是模糊时间

man at查看其他详细时间表示方法

at命令选项:

-m:当at工作完成后,即使没有输出信息,也会以mail通知用户工作已完成

-l:列出当前正在等待执行的任务队列

#at -l= #atq

-d:删除尚未执行的任务

#at -dJOB_ID = atrm JOB_ID

-f:指定执行对应目录下的脚本

#at-f /PATH/TO/AT_SCRIPT TIME 指定执行对应目录下的脚本

此处/PATH/TO/AT_SCRIPT称为at脚本

例:at的使用实例

通常在改远程主机ip之前,为避免修改后的新IP不通,导致无法连接,此场景中则可以先执行一个at任务

#at now 10min

at>ifconfig eth0 IP ##此IP为目前在使用的正确的IP

先发送此at任务,再去改IP,即使改错,10分钟后也会自动恢复。

与at的不同是,batch可以不需要指定时间,自动选择系统空闲时执行。在计划执行某些批处理任务的场合时,可能使用到,使其自己评估选择系统空闲时执行。

周期性任务:

周期性任务有两类:

系统类周期性任务:/etc/crontab

用户类周期性任务:/var/spool/cron/USERNAME

系统cron的定义:

方法:

1、#vim /etc/crontab 此配置文件中添加计划任务

2、#service crond restart 重启crond服务,使刚添加的计划任务生效

系统cron的配置文件/etc/crontab中7个字段的含义:

#cat/etc/crontab

# Example of job definition:

# .---------------- minute (0 - 59) #第一个字段,在第几分钟执行

# | .------------- hour (0 -23) #第二个字段

# | | .---------- day of month (1 - 31)

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...

# | | | | .---- day of week (0 - 6)(Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | | | | |

# * * * * * user-name(第六个字段) command to be executed(第七字段)

用户cron的定义:

方法:

#crontab -e [-u USERNAME]


此命令自动打开编辑器,即可新建任务、修改原有任务、删除原有任务,然后保存即可。此命令编辑文件提供语法检查功能,而通过vim并不会。类似visudo。

保存后的cron文件自动保存在 /var/spool/cron/USERNAME文件中,此文件中定义6个字段,意义同配置文件/etc/crontab中相同,只是去掉user-name段,即与系统cron相比,用户cron无需指定用户身份

crontab命令的选项:

-e:打开当前系统的默认文本编辑器,来定义用户cron

-r: 移除配置文件,会删除所有任务;

(若删除某指定任务,crontab -e打开文件删除对应行即可)

-l: 列出周期性任务

-u USERNAME:管理员以其他用户身份定义crontab,并且会保存对应用户名的目录下

E.g. #crontab-e -u user1 (所以即可实现root用户管理其他用户的任务)

cron配置文件中时间点的段,指定时间时可使用如下通配符:

* :相应时间点的所有有效取值,即意为每

E.g. 3 4 * * * root cat /etc/fstab 每天4点3分以root用户执行命令cat/etc/fstab

3 4 * * 5 root cat /etc/fstab 每周五4点3分执行(周和月,通常不同时使用)

, :离散取值

E.g. 3,18,33,48 * * * * root cat /etc/fstab

表示每小时的第3分钟,18分钟….,即每5分钟执行1次

/ :定义指定取值范围内的频率

E.g. */3 * * * * root cat/etc/fstab 每3分钟执行一次

17 */3 * * * root cat /etc/fstab 每3小时的第17分钟执行一次,即实现每3小时执行一次- :连续取值:

E.g. 17 8-20/3 * * * root cat /etc/fstab 每天8点到20点每3小时执行一次

例:3 18 * * 2,5 每周执行2次(周二和周五)

2,328-18/3 * * 1-5 周一到周五,8点到18点每隔3小时,每半小时执行一次

72 */2 * * root tar -Jcf /backup/etc-`date '+%F'`.tar.xz /etc/* 每2天的凌晨2点7分执行备份一次/etc目录

Linux中利用crontab创建计划任务 http://www.linuxidc.com//Linux/2013-06/86401.htm

Linux中用crontab例行工作安排 http://www.linuxidc.com//Linux/2013-06/85441.htm

Linux crontab不执行问题排查 http://www.linuxidc.com//Linux/2013-06/85432.htm

Ubuntu使用crontab定时任务 http://www.linuxidc.com//Linux/2013-05/84770.htm

Linux计划任务(at batch crontab anacron) http://www.linuxidc.com//Linux/2013-03/81584.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-09/106216.htm

linux


nginx绑定域名方法很简单,只要在nginx中servers中加入server然后把server_name写上你的域名就实现域名绑定了。
1、首先打开nginx域名配置文件存放目录:/usr/local/nginx/conf/servers ,如要绑定域名 www.111cn.net 则在此目录建一个文件:www.111cn.net.conf 然后在此文件中写规则,如:
server
{
listen 80;
server_name www.webzhishi.com; #绑定域名
index index.htm index.html index.php; #默认文件
root /home/www/111cn.net; #网站根目录
include location.conf; #调用其他规则,也可去除
}
2、然后重启nginx服务器,域名就绑定成功了,nginx服务器重启命令:/etc/init.d/nginx restart

如何查看Linux磁盘空间大小

一、df 命令;

df 是来自于coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置;

举例:

[root@localhost beinan]# df -lh

Filesystem 容量 已用 可用 已用% 挂载点

/dev/hda8 11G 6.0G 4.4G 58% /

/dev/shm 236M 0 236M 0% /dev/shm

/dev/sda1 56G 22G 35G 39% /mnt/sda1

我们从中可以看到,系统安装在/dev/hda8 ;还有一个56G的磁盘分区/dev/sda1挂载在 /mnt/sda1中;

其它的参数请参考 man df

二、fdsik

fdisk 是一款强大的磁盘操作工具,来自util-linux软件包,我们在这里只说他如何查看磁盘分区表及分区结构;参数 -l ,通过-l 参数,能获得机器中所有的硬盘的分区情况;

[root@localhost beinan]# fdisk -l

Disk /dev/hda: 80.0 GB, 80026361856 bytes

255 heads, 63 sectors/track, 9729 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/hda1 * 1 765 6144831 7 HPFS/NTFS

/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)

/dev/hda3 2806 7751 39728745 5 Extended

/dev/hda5 2806 3825 8193118+ 83 Linux

/dev/hda6 3826 5100 10241406 83 Linux

/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris

/dev/hda8 5199 6657 11719386 83 Linux

/dev/hda9 6658 7751 8787523+ 83 Linux

在上面Blocks中,表示的是分区的大小,Blocks的单位是byte ,我们可以换算成M,比如第一个分区/dev/hda1的大小如果换算成M,应该是6144831/1024=6000M,也就是6G左右,其实没有这么麻烦,粗略的看
一下把小数点向前移动三位,就知道大约的体积有多大了;

System 表示的文件系统,比如/dev/hda1 是NTFS格式的;/dev/hda2 表示是fat32格式的文件系统;.

在此例中,我们要特别注意的是/dev/hda3分区,这是扩展分区;他下面包含着逻辑分区,其实这个分区相当于一个容器;从属于她的有 hda5,hda6,hda7,hda8,hda9 ;

我们还注意到一点,怎么没有hda4呢?为什么hda4没有包含在扩展分区?一个磁盘最多有四个主分区; hda1-4算都是主分区;hda4不可能包含在扩展分区里,另外扩展分区也算主分区;在本例中,没有hda4这
个分区,当然我们可以把其中的一个分区设置为主分区,只是我当时分区的时候没有这么做而已;

再仔细统计一下,我们看一看这个磁盘是不是还有空间?hda1+hda2+hda3=实际已经分区的体积,所以我们可以这样算 hda1+hda2+hda3=6144831+16386300+39728745 = 62259876 (b),换算成M单位,小数点向
前移三位,所以目前已经划分好的分区大约占用体积是62259.876(M),其实最精确的计算 62259876/1024=60800.67(M);而这个磁盘大小是80.0 GB (80026361856byte),其实实际大小也就是78150.744(M
);通过我们一系列的计算,我们可以得出这个硬盘目前还有使用的空间;大约还有18G未分区的空间;

fdisk -l 能列出机器中所有磁盘的个数,也能列出所有磁盘分区情况;比如:

[root@localhost beinan]# fdisk -l

Disk /dev/hda: 80.0 GB, 80026361856 bytes

255 heads, 63 sectors/track, 9729 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/hda1 * 1 765 6144831 7 HPFS/NTFS

/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)

/dev/hda3 2806 7751 39728745 5 Extended

/dev/hda5 2806 3825 8193118+ 83 Linux

/dev/hda6 3826 5100 10241406 83 Linux

/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris

/dev/hda8 5199 6657 11719386 83 Linux

/dev/hda9 6658 7751 8787523+ 83 Linux

Disk /dev/sda: 60.0 GB, 60011642880 bytes

64 heads, 32 sectors/track, 57231 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System

/dev/sda1 1 57231 58604528 83 Linux

通过上面我们可以知道此机器有两块硬盘,我们也可以指定fdisk -l 来查看其中一个硬盘的分区情况;

[root@localhost beinan]# fdisk -l /dev/sda

Disk /dev/sda: 60.0 GB, 60011642880 bytes

64 heads, 32 sectors/track, 57231 cylinders

Units = cylinders of 2048 * 512 = 1048576 bytes

Device Boot Start End Blocks Id System

/dev/sda1 1 57231 58604528 83 Linux

通过上面情况可以知道,在/dev/sda 这个磁盘中,只有一个分区;使用量差不多是百分百了;

我们还可以来查看 /dev/hda的

[root@localhost beinan]# fdisk -l /dev/hda

自己试试看?

三、cfdisk 来自于util-linux的软件包;

cfdisk 也是一款不错的分区工具;在有些发行版中,此工具已经从util-linux包中剔除;cfdisk 简单易用是他的特点;和DOS中的fdisk 相似;在本标题中,我们只来解说如何查看机器的中的磁盘分区状况及
所用的文件系统等;

查看磁盘分区的用法 cfdisk -Ps 磁盘设备名;

比如

[root@localhost beinan]cfdisk -Ps

[root@localhost beinan]cfdisk -Ps /dev/hda

[root@localhost beinan]cfdisk -Ps

Partition Table for /dev/hda

First Last

# Type Sector Sector Offset Length Filesystem Type (ID) Flag

-- ------- ----------- ----------- ------ ----------- -------------------- ----

1 Primary 0 23438834 63 23438835 Linux (83) Boot

2 Primary 23438835 156296384 0 132857550 Extended (05) None

5 Logical 23438835 155268224 63 131829390 Linux (83) None

6 Logical 155268225 156296384 63 1028160 Linux swap (82) None

我们只用的参数 -Ps,就列出了磁盘的分区情况;目前在Slackware Debian Mandrake 等主流发行版中存在cfdisk ,而fedora 4.0把这个小工具剔除了;有点可惜;这是我在Slackware中操作的;

如果您这样操作,就更直观了;

[root@localhost beinan]cfdisk 磁盘设备名

举例:

[root@localhost beinan]cfdisk /dev/hda

您所看到的是如下的模式:

cfdisk 2.12a

Disk Drive: /dev/hda

Size: 80026361856 bytes, 80.0 GB

Heads: 255 Sectors per Track: 63 Cylinders: 9729

Name Flags Part Type FS Type [Label] Size (MB)

-------------------------------------------------------------------------------------------

hda1 Boot Primary Linux ReiserFS 12000.69

hda5 Logical Linux ReiserFS 67496.65

hda6 Logical Linux swap 526.42

[Bootable] [ Delete ] [ Help ] [Maximize] [ Print ] [ Quit ]

[ Type ] [ Units ] [ Write ]

Toggle bootable flag of the current partition

您进入了cfdisk 的操作界面;用键盘移动指针到[Quit]就可以退出;

四、parted 功能不错的分区工具;在Fedora 4.0中有带,可以自己安装上;在此主题中,我们只说如何查看磁盘的分区情况;

调用方法简单,parted 默认是打开的设备是/dev/hda ,也可以自己指定;比如 parted /dev/hda 或/dev/sda 等;退出的方法是 quit

[root@localhost beinan]# parted

使用 /dev/hda

(parted) p

/dev/hda 的磁盘几何结构:0.000-76319.085 兆字节

磁盘标签类型:msdos

Minor 起始点 终止点 类型 文件系统 标志

1 0.031 6000.842 主分区 ntfs 启动

2 6000.842 22003.088 主分区 fat32 lba

3 22003.088 60800.690 扩展分区

5 22003.119 30004.211 逻辑分区 reiserfs

6 30004.242 40005.615 逻辑分区 reiserfs

7 40005.646 40774.350 逻辑分区 linux-swap

8 40774.381 52219.094 逻辑分区 ext3

9 52219.125 60800.690 逻辑分区 reiserfs

我们在partd 的操作面上,用p就可以列出当前磁盘的分区情况,如果想要查看其它磁盘,可以用 select 功能,比如 select /dev/sda ;

五、qtparted ,与parted 相关的软件还有qtparted ,也能查看到磁盘的结构和所用的文件系统,是图形化的;

[beinan@localhost ~]# qtparted

图形化的查看,一目了然;

六、sfdisk 也是一个分区工具,功能也多多;我们在这里只说他的列磁盘分区情况的功能;

[root@localhost beinan]# sfdisk -l

自己看看吧;

sfdisk 有几个很有用的功能;有兴趣的弟兄不妨看看;

七、partx 也简要的说一说,有些系统自带了这个工具,功能也简单,和fdisk 、parted、cfdisk 来说不值一提;不用也罢;

用法: partx 设备名

[root@localhost beinan]# partx /dev/hda

# 1: 63- 12289724 ( 12289662 sectors, 6292 MB)

# 2: 12289725- 45062324 ( 32772600 sectors, 16779 MB)

# 3: 45062325-124519814 ( 79457490 sectors, 40682 MB)

# 4: 0- -1 ( 0 sectors, 0 MB)

# 5: 45062388- 61448624 ( 16386237 sectors, 8389 MB)

# 6: 61448688- 81931499 ( 20482812 sectors, 10487 MB)

# 7: 81931563- 83505869 ( 1574307 sectors, 806 MB)

# 8: 83505933-106944704 ( 23438772 sectors, 12000 MB)

# 9: 106944768-124519814 ( 17575047 sectors, 8998 MB)

八、查看目前机器中的所有磁盘及分区情况:

[beinan@localhost ~]$ cat /proc/partitions

major minor #blocks name

3 0 78150744 hda

3 1 6144831 hda1

3 2 16386300 hda2

3 5 8193118 hda5

3 6 10241406 hda6

3 7 787153 hda7

3 8 11719386 hda8

3 9 8787523 hda9

8 0 58605120 sda

8 1 58604528 sda1

1.CPU占用最多的前10个进程:

ps auxw|head -1;ps auxw|sort -rn -k3|head -10

2.内存消耗最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k4|head -10

3.虚拟内存使用最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k5|head -10



4.也可以试试

ps auxw --sort=rss

ps auxw --sort=%cpu



5.看看几个参数含义



%MEM 进程的内存占用率

MAJFL is the major page fault count,

VSZ 进程所使用的虚存的大小

RSS 进程使用的驻留集大小或者是实际内存的大小(RSS is the "resident set size" meaning physical memory used)

TTY 与进程关联的终端(tty)



串行端口终端(/dev/ttySn)

伪终端(/dev/pty/)

控制终端(/dev/tty)

控制台终端(/dev/ttyn, /dev/console)

虚拟终端(/dev/pts/n)



STAT 检查的状态:进程状态使用字符表示的,如R(running正在运行或准备运行)、S(sleeping睡眠)、I(idle空闲)、Z (僵死)、D(不可中断的睡眠,通常是I/O)、P(等待交换页)、W(换出,表示当
前页面不在内存)、N(低优先级任务)T(terminate终止)、W has no resident pages

D不可中断 Uninterruptible sleep (usually IO)

R正在运行,或在队列中的进程

S处于休眠状态

T停止或被追踪

Z僵尸进程

W进入内存交换(从内核2.6开始无效)

X死掉的进程



<高优先级

N低优先级

L有些页被锁进内存

s包含子进程

+位于后台的进程组;

l多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况...

还有一种办法是 ps -ef | sort -k7 ,将进程按运行时间排序,看哪个进程消耗的cpu时间最多。

top:
主要参数
d:指定更新的间隔,以秒计算。
q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将己完成或消失的子行程的CPU时间累积起来。
s:安全模式。
i:不显示任何闲置(Idle)或无用(Zombie)的行程。
n:显示更新的次数,完成后将会退出to
显示参数:
PID(Process ID):进程标示号。
USER:进程所有者的用户名。
PR:进程的优先级别。
NI:进程的优先级别数值。
VIRT:进程占用的虚拟内存值。
RES:进程占用的物理内存值。
SHR:进程使用的共享内存值。
S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
%CPU:该进程占用的CPU使用率。
%MEM:该进程占用的物理内存和总内存的百分比。
TIME+:该进程启动后占用的总的CPU时间。
Command:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。
top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。
<空格>:立刻刷新。
P:根据CPU使用大小进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
free
1.作用
free命令用来显示内存的使用情况,使用权限是所有用户。
2.格式
free [-b-k-m] [-o] [-s delay] [-t] [-V]
3.主要参数
-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
-s delay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。

uptime
18:59:15 up 25 min, 2 users, load average: 1.23, 1.32, 1.21
现在的时间
系统开机运转到现在经过的时间
连线的使用者数量
最近一分钟,五分钟和十五分钟的系统负载
参数: -V 显示版本资讯。

vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 1 24980 10792 8296 47316 5 19 205 52 1161 698 26 3 1 70
1 观察磁盘活动情况
磁盘活动情况主要从以下几个指标了解:
bi:表示从磁盘每秒读取的块数(blocks/s)。数字越大,表示读磁盘的活动越多。
bo:表示每秒写到磁盘的块数(blocks/s)。数字越大,表示写磁盘的活动越多。
wa:cpu等待磁盘I/O(未决的磁盘IO)的时间比例。数字越大,表示文件系统活动阻碍cpu的情况越严重,因为cpu在等待慢速的磁盘系统提供数据。wa为0是最理想的。如果wa经常大于10,可能文件系统就需
要进行性能调整了。
2 观察cpu活动情况
vmstat比top更能反映出cpu的使用情况:
us:用户程序使用cpu的时间比例。这个数字越大,表示用户进程越繁忙。
sy: 系统调用使用cpu的时间比例。注意,NFS由于是在内核里面运行的,所以NFS活动所占用的cpu时间反映在sy里面。这个数字经常很大的话,就需要注 意是否某个内核进程,比如NFS任务比较繁重。如果us
和sy同时都比较大的话,就需要考虑将某些用户程序分离到另外的服务器上面,以免互相影响。
id:cpu空闲的时间比例。
wa:cpu等待未决的磁盘IO的时间比例。

iostat
用于统计CPU的使用情况及tty设备、硬盘和CD-ROM的I/0量
参数:
-c 只显示CPU行
-d 显示磁盘行
-k 以千字节为单位显示磁盘输出
-t 在输出中包括时间戳
-x 在输出中包括扩展的磁盘指标
avg-cpu: %user %nice %sys %iowait %idle
20.25 0.18 2.61 76.39 0.57
%iowait 等待本地I/O时CPU空闲时间的百分比
%idle 未等待本地I/O时CPU空闲时间的百分比
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
hda 9.86 284.34 84.48 685407 2036
每秒传输数(tps)、每秒512字节块读取数(Blk_read/s)、每秒512字节块写入数(Blk_wrtn/s)和512字节块读取(Blk_read)和写入(Blk_wrtn)的总数量。

系统
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量
资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载
磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况
网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息
进程
# ps -ef # 查看所有进程
# top # 实时显示进程状态
用户
# w # 查看活动用户
# id # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务
服务
# chkconfig --list # 列出所有系统服务
# chkconfig --list | grep on # 列出所有启动的系统服务
程序
# rpm -qa # 查看所有安装的软件包


ssh -l root -p 23100 192.168.101.211

cp -r -p test/ test2 复制一个文件夹到另一个文件夹

cp -r -p test/* test2 复制一个文件夹到另一个文件夹 不包括test文件夹

原文地址:https://www.cnblogs.com/clphp/p/5842541.html