linux下的/dev/shm/

首先可以看出來/dev/shm是一個設備文件, 可以把/dev/shm看作是系統內存的入口, 可以把它看做是一塊物理存儲設備,一個tmp filesystem, 你可以通過這個設備向內存中讀寫文件, 以加快某些I/O高的操作,比如對一個大型文件頻繁的open, write, read,

據說oracle就利用了/dev/shm(shitou沒用過oracle), 可以通過mount命令列出當前的/dev/shm的掛載的文件系統,
你可以直接對/dev/shm進行讀寫操作, 例如:

1

#touch /dev/shm/file1

既然是基于內存的文件系統,系統重啟后/dev/shm下的文件就不存在了。Linux默認(CentOS)/dev/shm分區的大小是系統物理內存的50%, 雖說使用/dev/shm對文件操作的效率會高很多。但是目前各發行軟件中卻很少有使用它的(除了前面提到的Oracle), 可以通過ls /dev/shm查看下面是否有文件, 如果沒有就說明當前系統并沒有使用該設備。

二、修改/dev/shm大小

默認的最大一半內存大小在某些場合可能不夠用,并且默認的inode數量很低一般都要調高些,這時可以用mount命令來管理它。
#mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
在2G的機器上,將最大容量調到1.5G,并且inode數量調到1000000,這意味著大致可存入最多一百萬個小文件。
如果需要永久修改/dev/shm的值,需要修改/etc/fstab

1

2

tmpfs/dev/shm?tmpfs defaults,size=1.5G 0 0

mount?-o remount/dev/shm

三、/dev/shm應用

首先在/dev/shm建個tmp文件夾,然后與實際/tmp綁定

1

2

3

#mkdir /dev/shm/tmp

#chmod 1777 /dev/shm/tmp

#mount –bind /dev/shm/tmp /tmp(–bind )

在使用mount –bind olderdir newerdir命令來掛載一個目錄到另一個目錄后,newerdir的權限和所有者等所有信息會發生變化。掛載后的目錄繼承了被掛載目錄的所有屬性,除了名稱。Oracle 11g的amm內存管理模式就是使用/dev/shm,所以有時候修改MEMORY_TARGET或者MEMORY_MAX_TARGET會出現ORA-00845的錯誤:http://blog.csdn.net/heyutao007/article/details/7051269

巧用linux服務器的/dev/shm/,如果合理使用,可以避開磁盤IO不給力,提高網站訪問速度。

首先讓我們認識一下,什么是tmpfs和/dev/shm/?

tmpfs是Linux/Unix系統上的一種基于內存的文件系統。tmpfs可以使用您的內存或swap分區來存儲文件。由此可見,tmpfs主要存儲暫存的文件。它有如下2個優勢 : 1. 動態文件系統的大小。2. tmpfs 的另一個主要的好處是它閃電般的速度。因為典型的 tmpfs 文件系統會完全駐留在內存 RAM 中,讀寫幾乎可以是瞬間的。同時它也有一個缺點 tmpfs 數據在重新啟動之后不會保留,因為虛擬內存本質上就是易失的。所以有必要做一些腳本做諸如加載,綁定的操作。

tmpfs不具備持久性,重啟后數據不保留,請務必注意!!!

/dev/shm/是一個設備文件,它使用就是tmpfs文件系統(注意:在Centos和Redhat下,/dev/shm目錄是一個鏈接,指向/run/shm目錄,在Ubuntu系統下tmpfs文件系統對應的是/run/shm目錄,可以使用df命令查看),因為 /dev/shm/這個目錄不在硬盤上,而是在內存里,它就所謂的tmpfs。在Redhat/CentOS等linux發行版中默認大小為物理內存的一半。 比如我的的Red Hat Enterprise Linux Server 5.4 64(單核,512內存)分配內存為512M,所以/dev/shm為250M左右,查看/dev/shm如下:

1

2

3

4

[root@AY1212111202285f63122 ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/hda1?20G 7.6G 11G 42% /

tmpfs 250M 0 250M 0%/dev/shm

tmpfs是基于內存的文件系統,創建時不需要使用mkfs等初始化。如我想把/dev/shm tmpfs大小改為512M,修改/etc/fstab的

1

tmpfs/dev/shm?tmpfs defaults 0 0

改為

1

tmpfs/dev/shm?tmpfs,defaults,size=512m 0 0

所以修改前:

1

2

3

4

5

LABEL=/ / ext3 defaults 1 1

tmpfs/dev/shm?tmpfs defaults 0 0

devpts/dev/pts?devpts gid=5,mode=620 0 0

sysfs/sys?sysfs defaults 0 0

proc/proc?proc defaults 0 0

修改后為:

1

2

3

4

5

LABEL=/ / ext3 defaults 1 1

tmpfs/dev/shm?tmpfs,defaults,size=512m 0 0

devpts/dev/pts?devpts gid=5,mode=620 0 0

sysfs/sys?sysfs defaults 0 0

proc/proc?proc defaults 0 0

然后執行 mount -o remount /dev/shm

1

2

3

4

5

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

[root@AY1212111202285f63122 ]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/hda1?20G 7.6G 11G 42% /

tmpfs 512M 0 512M 0%/dev/shm

怎么樣,變成512M啦,使用很方便吧,重啟也沒有問題的,哈哈。當然在生產環境中你可以把內存加大些,反正現在內存很便宜啦,為了提高性能也需要將/dev/shm加大。

tmpfs(/dev/shm)的使用及應用場景

tmpfs是基于內存的,速度是不用說的,硬盤和它沒法比。Oracle 中的Automatic Memory Management特性就使用了/dev/shm。另外如果在網站運維中好好利用tmpfs,將有意想不到的收獲。我們先在/dev/shm建一個tmp目前,并與/tmp綁定。

1

2

3

4

5

[root@AY1212111202285f63122 ~]# mkdir /dev/shm/tmp

[root@AY1212111202285f63122 ~]# chmod 1777 /dev/shm/tmp //注意權限

[root@AY1212111202285f63122 ~]# mount --bind /dev/shm/tmp /tmp

[root@AY1212111202285f63122 ~]# ls -ld /tmp

drwxrwxrwt 2 root root 40 May 29 21:46/tmp

以下/tmp使用tmpfs文件系統的一些應用示例,一般tmpfs內存文件系統在做web緩存,臨時文件存儲時會對web訪問有很好的加速作用,從而提高網站訪問的速度。

1.將squid的緩存目錄cache_dir放到/tmp下

vi /etc/squid/squid.conf 修改成 cache_dir ufs /tmp 256 16 256

這里的第一個256表示使用256M內存,重啟一下squid服務,這樣緩存目錄都放在了tmpfs文件中了,速度不用說吧。

2.將php的session文件放在/tmp下

對于一個訪問量大的以apache php的網站,可能tmp下的臨時文件都會很多,比如seesion或者一些緩存文件,那么你可以把它保存到tmpfs文件。保存seesion的方法很簡單了:只要修改php.ini就行了,通過phpinfo測試文件查看你的php session存儲位置,如果不在/tmp下,修改php.ini文件,修改如下:

1

session.save_path = “/tmp

3.將服務的socket文件放在/tmp下

如nginx.socket和mysql.sock

至于tmpfs的其他應用,我想大家可能通過這篇文章會有所啟發。再次強調下:tmpfs 數據在重新啟動之后不會保留,重啟tmpfs 數據會丟失,所以有必要做一些腳本做諸如加載,綁定的操作!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535319.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535319.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2021-07-30

1.服務器級別的鎖等待 可以通過show processlist看到等待鎖的線程id,但是無法知道究竟哪個線程持有鎖 可以通過mysqladmin debug 相關等待鎖的線程以及誰持有鎖可以在錯誤日志中找到 2.存儲引擎層的鎖等待則比較麻煩,以下是innodb存儲引擎中鎖等待以及…

getopt設計shell腳本選項

寫shell腳本的時候,通過while、case、shift來設計腳本的命令行選項是一件比較麻煩的事,因為Unix命令行的選項和參數自由度很高,支持短選項和長選項,參數可能是可選的,選項順序可能是無所謂的,等等。 bash下…

percona-toolkit---pt-heartbeat

對于MySQL數據庫主從復制延遲的監控,可以借助percona的有力武器pt-heartbeat來實現。 pt-heartbeat的工作原理通過使用時間戳方式在主庫上更新特定表,然后在從庫上讀取被更新的時間戳然后與本地系統時間對比來得出其延遲。具體流程: 1&…

定時刪除腳本

#!/bin/sh backup_dir/data/xtrabackup DATEdate %Y-%m-%d #DATE_NOWdate %Y-%m-%d.%H%M DATE_NOWdate %Y-%m-%d PATH/usr/local/mysql/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATHbinog保留7天 binlog/data/binlogserver binlog_Rtime7#備…

percona-toolkit--pt-table-checksum

pt-table-checksum 是 Percona-Toolkit的組件之一,用于檢測MySQL主、從庫的數據是否一致。其原理是在主庫執行基于statement的sql語句來生成主庫數據塊的checksum,把相同的sql語句傳遞到從庫執行,并在從庫上計算相同數據塊的checksum&#xf…

Docker容器間網絡通信

自從Docker容器出現以來,容器網絡通信就一直是被關注的焦點,也是生產環境的迫切需求。容器網絡通信又分為兩大方面:單主機容器上的相互通信,和跨主機的容器相互通信。 一、Docker單主機容器通信 基于對net namespace的控制&#…

Docker容器的重啟策略

1. Docker容器的重啟策略 Docker容器的重啟策略是面向生產環境的一個啟動策略,在開發過程中可以忽略該策略。 Docker容器的重啟都是由Docker守護進程完成的,因此與守護進程息息相關。 Docker容器的重啟策略如下: no,默認策略&…

innobackupex實現導出和導入單張表

默認情況下,InnoDB表不能通過直接復制表文件的方式在mysql服務器之間進行移植,即便使用了innodb_file_per_table選項。而使用Xtrabackup工具可以實現此種功能,不過只能"導出"具有.ibd文件的表,也就是說導出表的mysql服務…

xtrabackup工具

(1).備份過程 和innobackupex備份過程不同的是,xtrabackup的備份路徑是由"--target-dir"選項嚴格指定的,如果指定的目錄不存在,它備份的時候不會在target-dir目錄中再創建時間戳子目錄。 [rootxuexi data]# xtrabackup --backup …

mysql數據庫參數

注意:在配置binlog相關變量的時候,相關變量名總是搞混,因為有的是binlog,有的是log_bin,當他們分開的時候,log在前,當它們一起的時候,bin在前。在配置文件中也同樣如此。 log_bin …

oracle命令行安裝

cd /home/oracle/databases/runInstaller -silent -force -showprogress -responseFile /home/oracle/database/db_install.rsp -ignoreSysPrereqs -ignorePrereqdbca -silent -responseFile pwd/dbca.rspnetca -silent -responseFile /home/oracle/databases/netca.rsp

定期刪除數據腳本

#!/bin/sh backup_dir/data/xtrabackup DATEdate %Y-%m-%d #DATE_NOWdate %Y-%m-%d.%H%M DATE_NOWdate %Y-%m-%d PATH/usr/local/mysql/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH#binog保留7天 binlog/data/binlogserver binlog_Rtime7#備…

定期備份數據庫腳本

#!/bin/bash MasterIp* USERroot PORT3306 PASSWD000000 DATEdate %Y-%m-%d #DATE_NOWdate %Y-%m-%d.%H%M DATE_NOWdate %Y-%m-%d OLDDATEdate %Y-%m-%d -d "30 days ago"  #全表備份 BACKUPDIR/data/mysql_backup/fulltable #單表tb_trcevt備份 datapath/data/mysq…

日志清理腳本

#!/bin/bash#定義日志所在分區當前空間所占比例數(去掉%)。grep -w表示精準匹配,只匹配"/"這個分區 LOG_PARTITION$(which df -h|awk {print $5,$6}|grep -w "/"|cut -d" " -f1|awk -F"%" {print $1}) #定義一周前的日期&a…

k8s二進制安裝

1. 前言 之前文章安裝 kubernetes 集群,都是使用 kubeadm 安裝,然鵝很多公司也采用二進制方式搭建集群。這篇文章主要講解,如何采用二進制包來搭建完整的高可用集群。相比使用 kubeadm 搭建,二進制搭建要繁瑣很多,需要…

Logstash mutate 插件

mutate 插件可以在字段上執行變換,包括重命名、刪除、替換和修改。這個插件相當常用。 比如: 你已經根據 Grok 表達式將 Tomcat 日志的內容放到各個字段中,想把狀態碼、字節大小或是響應時間,轉換成整型;你已經根據正則…

nginx日志分析腳本

#!/usr/bin/env bashecho "" echo " " echo " \ Nginx日志安全分析腳本 V1.0 / " echo " " echo " # 支持Nginx日志分析,攻擊告警分析等 " echo " # auth…

ELK學習筆記之Logstash詳解

0x00 Logstash概述 官方介紹:Logstash is an open source data collection engine with real-time pipelining capabilities。簡單來說logstash就是一根具備實時數據傳輸能力的管道,負責將數據信息從管道的輸入端傳輸到管道的輸出端;與此同時…

nginx-zabbix監控腳本

nginx_status_fun (){#函數內容NGINX_PORT$1#端口,函數的第一個參數是腳本的第二個參數,即腳本的第二個參數是段端口號NGINX_COMMAND$2#命令,函數的第二個參數是腳本的第三個參數,即腳本的第三個參數是命令nginx_active(){ #獲…

percona-xtrabackup備份

#!/bin/bash # 需要安裝 percona-xtrabackup # xtrabackup: https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/ # xtrabackup 版本:2.4.24 (RPM安裝) # MySQL 版本: 5.7.36 (RPM安裝) # version: 22.01.17# 備份服務器 ip DB_BACKUP_SERVER"…