2021年2月

查看内存使用情况 free

free

[root@VM-0-15-centos ~]# free

          total        used        free      shared  buff/cache   available

Mem: 3880232 519580 2857352 676 503300 3127164
Swap: 4194300 0 4194300

下面是对这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
如上例:
2795064=16176+110652+2668236

接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。
如何看额定值:

cat /proc/meminfo

[root@VM-0-15-centos ~]# cat /proc/meminfo
MemTotal: 3880232 kB
MemFree: 2860056 kB
MemAvailable: 3130356 kB
Buffers: 26028 kB
Cached: 421612 kB
SwapCached: 0 kB
Active: 587880 kB
Inactive: 284208 kB
Active(anon): 424704 kB
Inactive(anon): 416 kB
Active(file): 163176 kB
Inactive(file): 283792 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 4194300 kB
SwapFree: 4194300 kB
Dirty: 332 kB
Writeback: 0 kB
AnonPages: 424460 kB
Mapped: 60728 kB
Shmem: 676 kB
Slab: 71592 kB
SReclaimable: 56156 kB
SUnreclaim: 15436 kB
KernelStack: 3232 kB
PageTables: 13020 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 6134416 kB
Committed_AS: 1863792 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 13780 kB
VmallocChunk: 34359720444 kB
HardwareCorrupted: 0 kB
AnonHugePages: 313344 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 65392 kB
DirectMap2M: 3080192 kB
DirectMap1G: 3145728 kB

用free -m查看的结果:

          total        used        free      shared  buff/cache   available

Mem: 3789 507 2789 0 492 3053
Swap: 4095 0 4095

查看/proc/kcore文件的大小(内存镜像):
备注:

占用内存的测量

测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。

/proc/meminfo 机器的内存使用信息

/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。

/proc/pid/statm 进程所占用的内存

[root@localhost ~]# cat /proc/self/statm

654 57 44 0 0 334 0

输出解释

CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:

参数 解释 /proc//status

Size (pages) 任务虚拟地址空间的大小 VmSize/4

Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4

Shared(pages) 共享页数 0

Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4

Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4

Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4

dt(pages) 04

查看机器可用内存

/proc/28248/>free

total used free shared buffers cached

Mem: 1023788 926400 97388 0 134668 503688

-/+ buffers/cache: 288044 735744

Swap: 1959920 89608 1870312

我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。

所以 空闲内存=free+buffers+cached=total-used

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

top - 02:53:32 up 16 days, 6:34, 17 users, load average: 0.24, 0.21, 0.24
Tasks: 481 total, 3 running, 474 sleeping, 0 stopped, 4 zombie
Cpu(s): 10.3%us, 1.8%sy, 0.0%ni, 86.6%id, 0.5%wa, 0.2%hi, 0.6%si, 0.0%st
Mem: 4042764k total, 4001096k used, 41668k free, 383536k buffers
Swap: 2104472k total, 7900k used, 2096572k free, 1557040k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32497 jacky 20 0 669m 222m 31m R 10 5.6 29:27.62 firefox
4788 yiuwing 20 0 257m 18m 13m S 5 0.5 5:42.44 konsole
5657 Liuxiaof 20 0 585m 159m 30m S 4 4.0 5:25.06 firefox
4455 xiefc 20 0 542m 124m 30m R 4 3.1 7:23.03 firefox
6188 Liuxiaof 20 0 191m 17m 13m S 4 0.5 0:01.16 konsole

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

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

        三个数值分别为  1分钟、5分钟、15分钟前到现在的平均值。 

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

Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 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
0.0% si

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

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 键可以将当前的排序倒转。



























































































































- 阅读剩余部分 -

操作系统 centos

1.查看日志

/var/log 日志存储位置

/var/log/message ---------------------------------------系统启动后的信息和错误日志

/var/log/secure ------------------------------------------与安全相关的日志信息

/var/log/maillog ------------------------------------------与邮件相关的日志信息

/var/log/cron ----------------------------------------------与定时任务相关的日志信息

/var/log/spooler ------------------------------------------与UUCP和news设备相关的日志信息

/var/log/boot.log -----------------------------------------守护进程启动和停止相关的日志消息

/var/log/wtmp ---------------------------------------------永久记录每个用户登录、注销及系统的启动、停机的事件

/var/run/utmp ---------------------------------------------记录当前正在登录系统的用户信息;

/var/log/btmp ----------------------------------------------记录失败的登录尝试信息。

实践:查看常规日志

more /var/log/messages

显示的形式是:

事件发生的时间 事件发生源系统的主机名 产生日志消息的程序名 消息本身

也可以用

vi   /var/log/messages

2.查看磁盘空间大小

df -hl

3.查找大文件

cd /  #全盘位置
find . -type f -size +100M #查找大于100M的文件

4.查看占用CPU/内存最多的进程

ps -aux | sort -k4nr | head -10   #占用最高的10个进程

5.清除最近180天的日志 (根据网信办要求需提供至少180天的日志)

find /www/ -mtime +180 -name "*.log"  #www为项目所在位置

1.查看redis位置

 ps -ef|grep redis
 

/usr/local/redis/bin/redis-server 127.0.0.1:6379

可见redis所在位置 /usr/local/redis/bin/

2.使用cli连接数据库

redis-cli -h 127.0.0.1 -p 6379 -a 123456

3.选择库

select 1 //1为库号

4.列出所有key
keys *

#访问密码
$visit_key ='ejiegd1688';
#http协议
$http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
#获取当前域名
$domain =$http_type.$_SERVER['HTTP_HOST'];
$result=file_get_contents($domain."/index/time_task/sendInfo?key=".$visit_key);
#写入数据
//echo $result;
#写入日志
$log_msg =json_encode($res);
$log_path =dirname(__FILE__).'/../../runtime/log/'.date('Ym').'/';
//echo $log_path;
//echo "<br>";
#判断目录
if(!is_dir($log_path)){
mkdir($log_path,0777,true);
}
$data=json_encode($result,JSON_UNESCAPED_UNICODE)."\r\n";
$log_file =$log_path.'shell.log';
//echo $log_file;
//echo "<br>";
#判断是否有文件 没有创建
if(file_exists($log_file)){
    //追加数据
    $fh=fopen($log_file,"a");
    fwrite($fh,$data);
    fclose($fh);
}else{
    //创建文件
    fopen($log_file,"w");
}