分类 linux 下的文章

[Linux] 简单了解Linux的Page Cache

在Linux下,Page Cache可以加速访问磁盘上的文件,这是因为,当它第一次读或写数据到类似硬盘一样的存储介质时,Linux会存储这些数据到闲置的内存区域,它充当于一个缓存的角色,如果以后读取数据,他就可以迅速的在缓存中读取,这篇文章将会简单的让你了解有关Page Cache的一些信息。

内存使用

在Linux下,有多少内存被Page Cache使用,可以用free -m查看Cached那一列,例如:

➜  free -m
             total       used       free     shared    buffers     cached
Mem:          7684       7437        246        230        322        734
-/+ buffers/cache:       6380       1303
Swap:          255        255          0

数据写入

如果数据被写入,他首先会写到Page Cache,并把其作为一个脏页(dirty page)进行管理,“dirty”意味着数据存储在Page Cache中,但需要先写入到底层的存储设备,这些脏页的内容会被周期性的转移(系统调用sync或fsync)到底层的存储设备上。

下面的例子将会展示创建10M的文件,它首先将会写入到Page Cache中,相应的脏页将会增加,直到他把数据写到磁盘上,在这种情况下我们将会使用sync命令

➜  ~ cat /proc/meminfo | grep Dirty
Dirty:               160 kB
➜  ~ dd if=/dev/zero of=testfile.txt bs=1M count=10
记录了10+0 的读入
记录了10+0 的写出
10485760字节(10 MB)已复制,0.0157552 秒,666 MB/秒
➜  ~ cat /proc/meminfo | grep Dirty                
Dirty:             10480 kB
➜  ~ sync                                          
➜  ~ cat /proc/meminfo | grep Dirty
Dirty:               124 kB

数据读取

文件的写入操作不仅仅只有写入,也有读的操作,例如,当你读取同一个40M的文件两次,第二次读取将会变快,因为文件的block直接来自Page Cache的内存而不会去读取磁盘

➜  dumpdir free -m
             total       used       free     shared    buffers     cached
Mem:          7684       7491        192        243        328        667
-/+ buffers/cache:       6495       1188
Swap:          255        255          0
➜  dumpdir vim dump.dat
➜  dumpdir free -m
             total       used       free     shared    buffers     cached
Mem:          7684       7515        168        243        271        691
-/+ buffers/cache:       6552       1132
Swap:          255        255          0

如果Linux的application使用的可用内存不能够满足,长时间未被使用的Page Cache将会被删除

[Linux] abrt-hook-ccpp: Saved core dump of pid, 无法找到ccpp的dump文件

现象描述:

DN打日志正常,但进程却挂掉了,查看/var/log/messages日志中,当时出现abrt-hook-ccpp的日志:

 Jun 21 07:05:06 XXX-XXX-8152 abrt-hook-ccpp: Saved core dump of pid 10066 (/software/servers/jdk1.7.0_67/bin/java) to /var/tmp/abrt/ccpp-2016-06-21-07:04:59-10066 (912011264 bytes)
Jun 21 07:05:07 XXX-XXX-8152 abrt-server: Executable '/software/servers/jdk1.7.0_67/bin/java' doesn't belong to any package and ProcessUnpackaged is set to 'no'
Jun 21 07:05:07 XXX-XXX-8152 abrt-server: 'post-create' on '/var/tmp/abrt/ccpp-2016-06-21-07:04:59-10066' exited with 1
Jun 21 07:05:07 XXX-XXX-8152 abrt-server: Deleting problem directory '/var/tmp/abrt/ccpp-2016-06-21-07:04:59-10066'

在日志中可以发现无法创建ccpp文件,需要设置

How to enable handling of unpackaged software
Edit /etc/abrt/abrt-action-save-package-data.conf and change ProcessUnpackaged = no to ProcessUnpackaged = yes

# sed -i 's/ProcessUnpackaged = no/ProcessUnpackaged = yes/' /etc/abrt/abrt-action-save-package-data.conf

这时,你可能还需要设置coredumpsize unlimited才能看到超过1000M的文件

参考文章:

CentOS讨论

abrt常见问题

abrt 產生的 core dump 不見了?

[Linux] 使用noatime属性优化文件系统读取性能

当文件被创建,修改和访问时,Linux系统会记录这些时间信息,当访问足够频繁将会是很大的开销,因为每次访问都会记录时间,所以 我们今天使用bonnie++来简单测试我们修改noatime给我们带来的性能提升有多少,我们先下载最新版本的bonnie++

# tar xf bonnie++-1.97.tgz
# cd bonnie++-1.97.1
# make

编译好之后就可以使用了

注:测试数据最好为内存的2倍

所以在没修改noatime之前,我们先测试文件系统的性能

./bonnie++ -s 31896 -d /export/ -u root -q >> file.csv

运行结果如下:

Version  1.97       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
localhost    31896M   458  99 189663  52 82909  21  2487  98 214994  26 823.4  56
Latency             32591us     566ms     705ms   11924us     252ms     122ms
Version  1.97       ------Sequential Create------ --------Random Create--------
localhost           -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 16300  79 +++++ +++ +++++ +++ 14745  74 +++++ +++ 18007  32
Latency             10929us     478us     521us     493us     134us     374us

接下来我们修改挂载的/export,重新测试一遍

# vim /etc/fstab
UUID=d41182b5-5092-4f2f-88a3-be619feef512 /export                 ext4    defaults,noatime        1 2

设置立即生效

mount -o remount /export

执行命令:

./bonnie++ -s 31896 -d /export/ -u root -q >> file.csv

运行结果为:

Version  1.97       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
localhost    31896M   497  99 171760  35 93152  21  2276  97 240294  28 755.6  45
Latency             18716us     661ms     539ms   29368us     263ms   79468us
Version  1.97       ------Sequential Create------ --------Random Create--------
localhost           -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 18605  93 +++++ +++ +++++ +++ 20520  96 +++++ +++ +++++ +++
Latency              1186us     379us    1297us    1288us     127us    1443us

可能这样的结果不直观,我们可以

cat file.csv | ./bon_csv2html > result.html

网页打开为:

noatime_test1

可以看出214MBps提升到了240MBps,虽然这只是一次测试,但是理论上来说还是会有性能上的提升,在整体的集群环境下,还是有益提升集群性能的。

参考资料:

测试工具Bonnie++的使用

[Linux] ubuntu安装zsh

据说zsh还不错,还在体验中

在ubuntu下需要安装:

sudo apt-get install zsh git

然后进行下载:

wget --no-check-certificate https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

稍等片刻你就可以替换你的默认bash为zsh:

chsh -s /bin/zsh

重启就可以看到终端截面:

AsyncDispatcher

提示还不错,正在摸索中…