Menu
Woocommerce Menu

Unix中系统级IO,Linux命令教程

0 Comment

Linux中的Out Of Memory(OOM)
Killer成效是一种保证系统内部存款和储蓄器足够的终极花招,能够在耗尽系统内部存款和储蓄器或沟通区后,按某种算法推断占用系统最多能源的进度,向经过发送时域信号,强制甘休该进度。

Linux/Unix
I/O:将设备映射为文件的办法,允许Unix内核引出四个轻便易行、低档的利用接口。

du命令,即disk usage,能够测算文件或目录所占的磁盘空间。

大致来讲该机制会监察和控制那么些侵夺内存过大,尤其是仓卒之际迅猛消耗大批量内部存款和储蓄器的历程,为了以免内部存款和储蓄器耗尽而根本会把该进度杀掉。

Linux/Unix
IO的类别调用函数非常粗大略,它独有5个函数:open(打开)、close(关闭)、read(读)、write(写)、lseek(定位)。可是系统IO调用支付相当的大,日常不会平素调用,而是通过调用Rio包进行健康地读和写,也许调用C语言的标准I/O进行读写。固然如此,Rio包和正规IO也都是包裹了unix
I/O的,所以读书类别IO的调用技术越来越好地明白高等IO的原理。

命令格式:

du
[选项][文件]
du [OPTION]…
[FILE]…

本条功效正是在不能自由内部存款和储蓄器的情景下,也能够重新举行管教内部存款和储蓄器的管理进度,幸免系统停滞,还是能寻找过度消耗内部存款和储蓄器的进程。

1、张开文件
重返三个小的非负整数,即描述符。用描述符来标志文件。每一种进程都有四个张开的文本:标准输入(0)、标准输出(1)、标准错误(2)

并未有一点名别的取舍时,它会衡量当前工作目录与其全体子目录,分别展现各样目录所占的半空中,最后呈现职业目录所占总空间。

优良的情形是:某天一台机械忽地ssh远程登入不了,但能ping通,表明不是网络的故障恐怕机器down掉,相当大恐怕是sshd过程被
OOM killer杀掉了。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

一声令下选项:

-a,
–all
席卷了装有的文本,而不只是目录
-B,
–block-size=SIZE use SIZE-byte blocks
-b,
–bytes 以字节为总计单位
-k,
以千字节(KB)为总计单位
-m,
以兆字节(M)为总计单位
-c,
–total 最终加上二个合计(系统缺省)
-D,
–dereference-args
dereference
FILEs that are symbolic links
-H
跟 – -si效果等同。
-h,
–human-readable 以相比阅读的议程出口文件大小音信 (比方,1K 234M
2G)。注:该选项在好些个其余命令(df, ls)中也平价。
–si
跟-h 效果等同,只是以一千为换算单位
-l,
–count-links 计算有所的文件大小,对硬链接文件,则总结多次。
-L,
–dereference 呈现选项中所钦定符号连接的源文件大小。
-P,
–no-dereference 不跟随任何的暗号连接(缺省)
-S,
–separate-dirs 总结目录所占空间时不饱含子目录的轻重缓急。
-s,
–summarize 只显示职业目录所占总空间
-x,
–one-file-system
以一始发拍卖时的文件系统为准,若遇上此外不一致的文件系统目录则略过。
-X
FILE, –exclude-from=FILE 排除掉钦命的FILE
–exclude=PATTEEnclaveN
排除掉适合样式的文件,帕特tern正是一般的Shell样式,?表示别的一个字符,*代表放肆七个字符。
–max-depth=N
只列出深度小于max-depth的目录和文书的音讯–max-depth=0 的时候效果跟–s是 一样

重启机器后翻看系统日志/var/log/messages会开采 Out of Memory: Kill
process 247(sshd)类似的错误音信。

int open(char *filename, int flags, mode_t mode);
        //重返:若成功则为新文件描述符,若出错为-1

动用实例:

实例1:呈现目录大概文件所占空间 

命令:

du

输出:

[root@localhost test]# du
608     ./test6
308     ./test4
4       ./scf/lib
4       ./scf/service/deploy/product
4       ./scf/service/deploy/info
12      ./scf/service/deploy
16      ./scf/service
4       ./scf/doc
4       ./scf/bin
32      ./scf
8       ./test3
1288    .

图片 1😉

说明:

只体现当前目录上面包车型大巴子目录的目录大小和当前目录的总的大小,最上边包车型客车1288为当前目录的总大小

实例2:展现钦赐文件所占空间

命令:

du log2012.log

输出:

[root@localhost test]# du log2012.log 
300     log2012.log
[root@localhost test]#

实例3:查看钦赐目录的所占空间

命令:

du scf

输出:

[root@localhost test]# du scf
4       scf/lib
4       scf/service/deploy/product
4       scf/service/deploy/info
12      scf/service/deploy
16      scf/service
4       scf/doc
4       scf/bin
32      scf
[root@localhost test]#

实例4:展现多个文件所占空间

命令:

du log30.tar.gz log31.tar.gz

输出:

[root@localhost test]# du log30.tar.gz log31.tar.gz 
4       log30.tar.gz
4       log31.tar.gz
[root@localhost test]#

实例5:只展现总和的分寸

命令:

du -s

输出:

[root@localhost test]# du -s
1288    .
[root@localhost test]# du -s scf
32      scf
[root@localhost test]# cd ..
[root@localhost soft]# du -s test
1288    test
[root@localhost soft]# 

实例6:方便阅读的格式展现

命令:

du -h test

输出:

[root@localhost soft]# du -h test
608K    test/test6
308K    test/test4
4.0K    test/scf/lib
4.0K    test/scf/service/deploy/product
4.0K    test/scf/service/deploy/info
12K     test/scf/service/deploy
16K     test/scf/service
4.0K    test/scf/doc
4.0K    test/scf/bin
32K     test/scf
8.0K    test/test3
1.3M    test
[root@localhost soft]# 

实例7:文件和目录都显得

命令:

输出:

[root@localhost soft]# du -ah test
4.0K    test/log31.tar.gz
4.0K    test/test13.tar.gz
0       test/linklog.log
0       test/test6/log2014.log
300K    test/test6/linklog.log
0       test/test6/log2015.log
4.0K    test/test6/log2013.log
300K    test/test6/log2012.log
0       test/test6/log2017.log
0       test/test6/log2016.log
608K    test/test6
0       test/log2015.log
0       test/test4/log2014.log
4.0K    test/test4/log2013.log
300K    test/test4/log2012.log
308K    test/test4
4.0K    test/scf/lib
4.0K    test/scf/service/deploy/product
4.0K    test/scf/service/deploy/info
12K     test/scf/service/deploy
16K     test/scf/service
4.0K    test/scf/doc
4.0K    test/scf/bin
32K     test/scf
4.0K    test/log2013.log
300K    test/log2012.log
0       test/log2017.log
0       test/log2016.log
4.0K    test/log30.tar.gz
4.0K    test/log.tar.bz2
4.0K    test/log.tar.gz
0       test/test3/log2014.log
4.0K    test/test3/log2013.log
8.0K    test/test3
4.0K    test/scf.tar.gz
1.3M    test
[root@localhost soft]# 

实例8:展现多少个公文或目录各自占用磁盘空间的尺寸,还总结它们的总的数量

命令:

du -c log30.tar.gz log31.tar.gz

输出:

[root@localhost test]# du -c log30.tar.gz log31.tar.gz 
4       log30.tar.gz
4       log31.tar.gz
8       总计
[root@localhost test]#

说明:

拉长-c选项后,du不独有显得三个目录各自占用磁盘空间的轻重缓急,还在最后一行计算它们的总量。

实例9:根据空间尺寸排序

命令:

du|sort -nr|more

输出:

[root@localhost test]# du|sort -nr|more
1288    .
608     ./test6
308     ./test4
32      ./scf
16      ./scf/service
12      ./scf/service/deploy
8       ./test3
4       ./scf/service/deploy/product
4       ./scf/service/deploy/info
4       ./scf/lib
4       ./scf/doc
4       ./scf/bin
[root@localhost test]# 

实例10:输出当前目录下依次子目录所选用的半空中

命令:

du -h  –max-depth=1

输出:

[root@localhost test]# du -h  --max-depth=1
608K    ./test6
308K    ./test4
32K     ./scf
8.0K    ./test3
1.3M    .
[root@localhost test]#

正文永远更新链接地址:http://www.linuxidc.com/Linux/2015-08/121202.htm

图片 2

还应该有另外一种处境也会产生能ping不能够ssh,正是网络连接过多把系统文件描述符能源耗尽,这里暂时不怀想这种场地。

flags:进程筹算怎么访谈文件

而在运用vip的高可用方案中,这种情景也很轻巧并发脑裂的情景。

O_RDONLY:只读    O_WRONLY:只写    O_昂科雷DW科雷傲:可读可写

防护主要的系统经过触发(OOM)机制而被杀掉:能够安装参数/proc/PID/oom_adj为-17,可偶尔关闭linux内核的OOM机制。内核会通过特定的算法给各种进度总括三个分数来决定杀哪个进度,种种进程的oom分数能够/proc/PID/oom_score中找到。

也能够是贰个或越来越多位掩码的或:

小编们认为根本的进度有sshd,恐怕局部督察守护进程,我们能够根据本人其实际处情状采纳须求有限支持的长河。

O_CREAT:如文件荒诞不经,则开创

维护有些进度不被基本杀掉能够这么操作:

O_TRUNC:假使文件已存在,则截断

echo -17 > /proc/$PID/oom_adj

O_应用软件END:每趟写操作,设置k到文件结尾

能够写三个简易的剧本,安排在crontab上幸免首要进度被oom

mode:钦点新文件的访谈权限位

pgrep -f “/usr/sbin/sshd” | while read PID;do echo -17 >
/proc/$PID/oom_adj;done

各类进度都有二个umask,通过调用umask函数设置。所以文件的权杖为被设置成mode
& ~umask

在那之中的“/usr/sbin/sshd”能够替换为您以为器重的进程,不过在配应时候注意不要相称错了

2、改动近年来文件地点 
从文件先河开头的字节偏移量。系统基本保持贰个文书地点k,对于每一个伸开的公文,早先值为0。应用程序实施seek,设置当前地方k,通过调用lseek函数,显示地修改当前文件地点。

•进程的选定方法

3、读写文件。读操作:从文件拷贝n个字节到存款和储蓄器,从当下文件地点k起首,将k扩大到k+n,对于二个大大小小为m字节的公文,当k>=m时,读操作触发贰个EOF的法则。写操作:从存储器拷贝n个字节到文件,k更新为k+n

OOM
Killer在内部存款和储蓄器耗尽时,会翻动全数进度,并分别为每一种进度总括分数。将功率信号发送给分数最高的长河。

#include <unistd.h>

测算分数的章程

ssize_t read(int fd, void *buf, size_t n);
            //再次回到:若成功则为读的字节数,若EOF则为0,若出错为-1.

标签:,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图