内存属于linux文件吗,linux下的/dev/shm是什么? 内存 文件系统

linux下的/dev/shm是什么?

/dev/shm/是linux下一个目录,/dev/shm目录不在磁盘上,而是在内存里,因此使用linux /dev/shm/的效率非常高,直接写进内存。

我们可以通过以下两个脚本来验证linux /dev/shm的性能:

[root@db1 oracle]# ls -l linux_11gR2_grid.zip

-rw-r--r-- 1 oracle dba 980831749 Jul 11 20:18 linux_11gR2_grid.zip

[root@db1 oracle]# cat mycp.sh

#!/bin/sh

echo `date`

cp linux_11gR2_grid.zip ..

echo `date`

[root@db1 oracle]# ./mycp.sh

Fri Jul 15 18:44:17 CST 2011

Fri Jul 15 18:44:29 CST 2011

[root@db1 shm]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/rootvg-lv01

97G  9.2G   83G  10% /

/dev/sda1              99M   15M   80M  16% /boot

tmpfs                 2.0G     0  2.0G   0% /dev/shm

[root@db1 oracle]# cat mycp1.sh

#!/bin/sh

echo `date`

cp linux_11gR2_grid.zip /dev/shm

echo `date`

[root@db1 oracle]# ./mycp1.sh

Fri Jul 15 18:44:29 CST 2011

Fri Jul 15 18:44:30 CST 2011

[root@db1 oracle]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/rootvg-lv01

97G  9.2G   83G  10% /

/dev/sda1              99M   15M   80M  16% /boot

tmpfs                 2.0G  937M  1.1G  46% /dev/shm

[root@db1 oracle]#

可以看出,在对一个将近1g为文件的复制,拷到磁盘上与拷到/dev/shm下还是有很大差距的。

tmpfs有以下特点:

1.tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。

2.动态文件系统的大小。

3.tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。

4.tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载、绑定的操作。

2.linux /dev/shm 默认容量

linux下/dev/shm的容量默认最大为内存的一半大小,使用df -h命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1G,里头放有 100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是绝不会被系统回收重新划分的,否则谁还敢往里头存文件呢?

通过df -h查看linux /dev/shm的大小

[root@db1 shm]# df -h /dev/shm

Filesystem            Size  Used Avail Use% Mounted on

tmpfs                 1.5G     0  1.5G   0% /dev/shm

3.linux /dev/shm 容量(大小)调整

linux /dev/shm容量(大小)是可以调整,在有些情况下(如oracle数据库)默认的最大一半内存不够用,并且默认的inode数量很低一般都要调高些,这时可以用mount命令来管理它。

mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm

在2G的机器上,将最大容量调到1.5G,并且inode数量调到1000000,这意味着大致可存入最多一百万个小文件

通过/etc/fstab文件来修改/dev/shm的容量(增加size选项即可),修改后,重新挂载即可:

[root@db1 shm]# grep tmpfs /etc/fstab

tmpfs                   /dev/shm                tmpfs   defaults,size=2G        0 0

[root@db1 /]# umount /dev/shm

[root@db1 /]# mount /dev/shm

[root@db1 /]# df -h /dev/shm

Filesystem            Size  Used Avail Use% Mounted on

tmpfs                 2.0G     0  2.0G   0% /dev/shm

[root@db1 /]# # mount -o remount /dev/shm

[root@db1 /]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/rootvg-lv01

97G  9.2G   83G  10% /

/dev/sda1              99M   15M   80M  16% /boot

tmpfs                 2.0G     0  2.0G   0% /dev/shm

附:tmpfs文档

Tmpfs is a file system which keeps all files in virtual memory.

Everything in tmpfs is temporary in the sense that no files will be

created on your hard drive. If you unmount a tmpfs instance,

everything stored therein is lost.

tmpfs puts everything into the kernel internal caches and grows and

shrinks to accommodate the files it contains and is able to swap

unneeded pages out to swap space. It has maximum size limits which can

be adjusted on the fly via ‘mount -o remount …’

If you compare it to ramfs (which was the template to create tmpfs)

you gain swapping and limit checking. Another similar thing is the RAM

disk (/dev/ram*), which simulates a fixed size hard disk in physical

RAM, where you have to create an ordinary filesystem on top. Ramdisks

cannot swap and you do not have the possibility to resize them.

Since tmpfs lives completely in the page cache and on swap, all tmpfs

pages currently in memory will show up as cached. It will not show up

as shared or something like that. Further on you can check the actual

RAM+swap use of a tmpfs instance with df(1) and du(1).

tmpfs has the following uses:

1) There is always a kernel internal mount which you will not see at

all. This is used for shared anonymous mappings and SYSV shared

memory.

This mount does not depend on CONFIG_TMPFS. If CONFIG_TMPFS is not

set, the user visible part of tmpfs is not build. But the internal

mechanisms are always present.

2) glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for

POSIX shared memory (shm_open, shm_unlink). Adding the following

line to /etc/fstab should take care of this:

tmpfs /dev/shm tmpfs defaults 0 0

Remember to create the directory that you intend to mount tmpfs on

if necessary (/dev/shm is automagically created if you use devfs).

This mount is _not_ needed for SYSV shared memory. The internal

mount is used for that. (In the 2.3 kernel versions it was

necessary to mount the predecessor of tmpfs (shm fs) to use SYSV

shared memory)

3) Some people (including me) find it very convenient to mount it

e.g. on /tmp and /var/tmp and have a big swap partition. But be

aware: loop mounts of tmpfs files do not work due to the internal

design. So mkinitrd shipped by most distributions will fail with a

tmpfs /tmp.

4) And probably a lot more I do not know about

tmpfs has a couple of mount options:

size: The limit of allocated bytes for this tmpfs instance. The

default is half of your physical RAM without swap. If you

oversize your tmpfs instances the machine will deadlock

since the OOM handler will not be able to free that memory.

nr_blocks: The same as size, but in blocks of PAGECACHE_SIZE.

nr_inodes: The maximum number of inodes for this instance. The default

is half of the number of your physical RAM pages.

These parameters accept a suffix k, m or g for kilo, mega and giga and

can be changed on remount.

To specify the initial root directory you can use the following mount

options:

mode: The permissions as an octal number

uid: The user id

gid: The group id

These options do not have any effect on remount. You can change these

parameters with chmod(1), chown(1) and chgrp(1) on a mounted filesystem.

So ‘mount -t tmpfs -o size=10G,nr_inodes=10k,mode=700 tmpfs /mytmpfs’

will give you tmpfs instance on /mytmpfs which can allocate 10GB

RAM/SWAP in 10240 inodes and it is only accessible by root.

TODOs:

1) give the size option a percent semantic: If you give a mount option

size=50% the tmpfs instance should be able to grow to 50 percent of

RAM + swap. So the instance should adapt automatically if you add

or remove swap space.

2) loop mounts: This is difficult since loop.c relies on the readpage

operation. This operation gets a page from the caller to be filled

with the content of the file at that position. But tmpfs always has

the page and thus cannot copy the content to the given page. So it

cannot provide this operation. The VM had to be changed seriously

to achieve this.

3) Show the number of tmpfs RAM pages. (As shared?)

Author:

Christoph Rohland , 1.12.01

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

群晖备份linux分区,数据丢失的后悔药,群晖NAS备份方案详解

“秒速开机”——据说90%的人都是因为这句话而知道的SSD固态硬盘。相比于机械硬盘,SSD固态硬盘开机快、关机快、打开软件快、载入数据快、拷贝快、删除也快——既快乐、又爽快,更是大块人心!然而,SSD固态硬盘已经可以完全取代机械硬盘了吗&am…

php cdi_异步CDI事件

php cdi几天前,在我们的常规代码审查中,我的一位同事提出了一个问题,即如果可能,一次同时调用CDI观察者(这样的方法带有参数Observes )将发生多次?用于不同的事件实例。 换句话说,在…

tg3269c网卡驱动linux,TP-Link3269C网卡驱动官方版

TG-3269C驱动是一款能够安装于由普联发布的无线网卡驱动,通过此安装驱动我们手机和其他无线设备才能连接上无线网卡并进行上网,同时如果你的网卡经常出现断开和重连、网络不稳定等情况可以通过重新安装驱动,查看是否是硬件的问题,…

使用Spring Security,Thymeleaf和Okta保护Java应用程序的安全

永不再构建身份验证 –喜欢构建用户管理? 使用Okta,您可以在几分钟内为您的应用程序添加社交登录,多因素身份验证和OpenID Connect支持。 立即创建一个免费的开发者帐户。 在构建Java应用程序时,用户管理是至关重要的考虑因素。 …

红旗linux添加usb无线网卡,在Ubuntu 8.10中安装无线网卡RTL8187SE驱动

本人的笔记本是微星的Wind U90,自带的无线网卡是RTL8187SE。这款无线网卡在一般的Linux下是没有驱动的,微星的官方也仅仅提供在OpenSUSE下的驱动。为了在我的Ubuntu下使用这个网卡,只能自己动手了。还好,有了互联网上各位大侠和微…

java linq_LINQ和Java

java linqLINQ已经非常成功,但在.NET生态系统中也引起了争议。 许多人正在Java世界中寻找可比的解决方案。 为了更好地理解什么是可比的解决方案,让我们看一下LINQ解决的主要问题: 查询语言通常是具有许多关键字的声明性编程语言。 它们提供…

嵌入式 linux restful,嵌入式 RESTful 框架 express.java

软件介绍express.java 是一个微型的 RESTful Web 框架。可用于嵌入应用内部,替代 JMX 用于跨语言通讯。示例代码:WebServer.jettyServer().get("/", new AjaxController() {Overridepublic Object ajax(ParamMap params) {return ResultMap.cr…

将Google reCaptcha与Spring Boot应用程序结合使用

介绍 Google的reCaptcha是一个用于防止漫游器向您的公共表单提交数据或访问您的公共数据的库。 在本文中,我们将研究如何将reCaptcha与基于Spring Boot的Web应用程序集成 设置验证码 您应该从管理面板创建API密钥。 您必须创建一个示例应用程序,如下所…

探索 HTTP 请求的世界:get 和 post 的奥秘(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

linux 书签管理工具,在书签管理工具中使用Ubuntu字体

通过便捷书签管理程序(Bookmarklet,一种在浏览器中存放书签URL地址的应用程序)来在大多数的网站上推广使用Ubuntu系统的默认字体。——读者米格尔费尔南迪斯米格尔在他的想法产生之前告诉我们说:“我发现Ubuntu系统的字体在提高可读性上超过了绝大多数的…

linux18.2安装界面,Ubuntu 18.10下安装Grub Customizer 5.1.0配置grub2图形化界面

配置Grub2/burg引导装载程序Grub Customizer 5.1.0新增加对Ubuntu 18.10的支持,我们可以用PPA源来安装,同时还支持Ubuntu 18.04、16.04、14.04。Grub Customizer简介Grub Customizer是用来配置Grub/burg引导装载程序的图形工具,此次发布的5.1…

使用Eclipse和Open Liberty的Java EE 8上的Java 9

几周前,我写了一篇文章,标题为哪个IDE和服务器支持Java EE 8和Java9 ,着眼于Java 9和Java EE 8之间的当前运行状态。您可以期待事情发展很快,我们现在有了一些alpha和支持Java 9和Java EE 8的开发版本。这些是– Payara 5 –适用…

深入浅出linux工具与编程 下载,8208.深入浅出Linux工具与编程.pdf

<>猛点这里下载全部内容目录&#xff1a;第1篇Linux命令及其工具第1章Linux系统与命令1.1Linux操作系统1.1.1Linux重要概念1.1.2Linux组成1.1.3Linux目录结构1.1.4Linux操作系统的组成1.1.5Linux用户管理1.1.6Linux文件管理1.2Linux命令1.2.1Linux命令帮助1.2.2Linux命令…

linux删除含有特殊字符的行,Linux 删除带有特殊字符的文件

禁止页面后退JS(兼容各浏览器)XML中&lt&semi;beans&gt&semi;中属性概述

使用SpringWebFlux的反应式Web应用程序

1.反应式编程简介 反应式编程是为具有以下特征的应用程序创造的术语&#xff1a; 非阻塞应用 事件驱动和异步 需要少量线程来垂直扩展&#xff08;即在JVM中&#xff09; 就像面向对象的编程&#xff0c;函数式编程或过程式编程一样&#xff0c;反应式编程只是另一种编程范…

对linux的mv命令设计测试用例,测试用例中的细节 - 八音弦的个人空间 - OSCHINA - 中文开源技术交流社区...

编写测试用例是在实际测试执行开始之前进行的软件测试活动的重要组成部分。因此&#xff0c;在编写测试用例时必须头脑清晰地理解需求。测试执行阶段的顺利程度主要取决于测试用例的编写质量&#xff0c;还取决于对需求的理解程度。理论上来讲应避免在测试用例中放入不必要或不…

linux python whl md5,Python计算一个目录下的所有文件的md5值,在Linux系统下面

实现代码如下&#xff1a;#!/usr/bin/python#*-*coding:utf8*-*import osimport sysimport hashlibdef md5sum(data):with open(data, "rb") as f:md5 hashlib.md5() #赋空值for i in f.read(4096): #防止遇到大文件打开太占用内存&#xff0c;所以一次打开4…

Java命令行界面(第28部分):getopt4j

getopt4j的页面将其描述为“一个根据GNU样式解析命令行参数的库。” 然后&#xff0c; 页面介绍getopt4j &#xff1a;“getopt4j库旨在以与glibc &#xff08;GNU C运行时库&#xff09;中的C getopt&#xff08;&#xff09;函数相同的方式解析命令行选项。 与原始产品相比&a…

c语言找出公共子字符串,经典C语言面试题:求解最大公共子串

今天去面试&#xff0c;面试官出了一道题&#xff0c;求两个字符串的最大公共子串(Longest Common Substring)&#xff0c;一听起来不是很难&#xff0c;但让我在纸上写着写着就迷糊了。回来特地网搜了一下。面试下面经过两种方法来求两个字符串的最大连续公共子串。数组方法1&…

c语言中如何防止输入的格式存在错误,C语言如何避免输入

C语言如何处理输入下面这个题&#xff0c;数据的处理很简单&#xff0c;方法也很多。但是数据的输入如何处理呢&#xff0c;还要分多行输入&#xff01;&#xff01;引用标题&#xff1a;错误票据某涉密单位下发了某种票据&#xff0c;并要在年终全部收回。每张票据有唯一的ID号…