Oracle Study之--IPCS管理共享內(nèi)存
成都創(chuàng)新互聯(lián)公司是專(zhuān)業(yè)的永城網(wǎng)站建設(shè)公司,永城接單;提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行永城網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
Unix/linux下的共享內(nèi)存、信號(hào)量、隊(duì)列信息管理
在unix/linux下,經(jīng)常有因?yàn)楣蚕韮?nèi)存、信號(hào)量,隊(duì)列等共享信息沒(méi)有干凈地清除而引起一些問(wèn)題。
查看共享信息的內(nèi)存的命令是:ipcs [-m|-s|-q]。
默認(rèn)會(huì)列出共享內(nèi)存、信號(hào)量,隊(duì)列信息
-m列出共享內(nèi)存
-s列出共享信號(hào)量
-q列出共享隊(duì)列
清除命令是:ipcrm [-m|-s|-q] id。
-m刪除共享內(nèi)存
-s刪除共享信號(hào)量
-q刪除共享隊(duì)列。
案例分析:
[oracle@trade_as02 ~]$ ipcs -a ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x30024289 32768 futures 777 528384 1 0xca2fd414 491521 oracle 640 1730150400 16 ------ Semaphore Arrays -------- key semid owner perms nsems 0x00028009 0 futures 666 1 0x0002800c 32769 futures 666 1 0x30024003 262146 futures 777 3 0x3002428a 294915 futures 777 2 0x3002428b 327684 futures 777 2 0x3002428c 360453 futures 777 2 0x3002428d 393222 futures 777 2 0x3002428e 425991 futures 777 2 0x52dff7d0 3964936 oracle 640 151 0x52dff7d1 3997705 oracle 640 151 0x52dff7d2 4030474 oracle 640 151 0x52dff7d3 4063243 oracle 640 151 0x52dff7d4 4096012 oracle 640 151 ------ Message Queues -------- key msqid owner perms used-bytes messages
共享內(nèi)存段有時(shí)不能馬上刪除,需使用這個(gè)內(nèi)存段的所有進(jìn)程向OS發(fā)送detach命令時(shí)才有釋放,此時(shí)可以考慮刪除進(jìn)程使用的信號(hào)量,幫助釋放共享內(nèi)存段
相關(guān)知識(shí):信號(hào)量、資源釋放、ipcs、ipcrm
信號(hào)量又稱為信號(hào)燈,它是用來(lái)協(xié)調(diào)不同進(jìn)程間的數(shù)據(jù)對(duì)象的,而最主要的應(yīng)用是共享內(nèi)存方式的進(jìn)程間通信。本質(zhì)上,信號(hào)量是一個(gè)計(jì)數(shù)器,它用來(lái)記錄對(duì)某個(gè)資源(如共享內(nèi)存)的存取狀況;共享內(nèi)存是運(yùn)行在同一臺(tái)機(jī)器上的進(jìn)程間通信最快的方式,因?yàn)閿?shù)據(jù)不需要在不同的進(jìn)程間復(fù)制。通常由一個(gè)進(jìn)程創(chuàng)建一塊共享內(nèi)存區(qū),其余進(jìn)程對(duì)這塊內(nèi)存區(qū)進(jìn)行讀寫(xiě)。在Linux系統(tǒng)下 ,常用的方式是通過(guò)shmXXX函數(shù)族來(lái)實(shí)現(xiàn)利用共享內(nèi)存進(jìn)行存儲(chǔ)的。如Shmget,類(lèi)似于 malloc函數(shù)
ipcs可用來(lái)顯示當(dāng)前Linux系統(tǒng)中的共享內(nèi)存段、信號(hào)量集、消息隊(duì)列等的使用情況。
命令示例: ipcs -a或ipc 顯示當(dāng)前系統(tǒng)中共享內(nèi)存段、信號(hào)量集、消息隊(duì)列的使用情況; ipcs -m 顯示共享內(nèi)存段的使用情況; ipcs -s 顯示信號(hào)量集的使用情況; ipcs -q 顯示消息隊(duì)列的使用情況;
ipcrm可用來(lái)刪除對(duì)應(yīng)的共享內(nèi)存段、信號(hào)量、消息隊(duì)列;
命令示例: ipcrm -s semid 刪除對(duì)應(yīng)的信號(hào)量集 ipcrm -m shmid 刪除對(duì)應(yīng)的共享內(nèi)存段 ipcrm -q msqid 刪除對(duì)應(yīng)的消息隊(duì)列 ipcrm本身只能實(shí)現(xiàn)單個(gè)資源的刪除,利用以下命令可實(shí)現(xiàn)批量刪除: 1.ipcs -s|grep 用戶名|cut -d" " -f2|xargs -n1 ipcrm -s 2.ipcs -s|awk '/用戶名/{print $2}'|xargs -n1 ipcrm -s 3.ipcs -s|awk '/用戶名/{system("ipcrm -s "$2)}' 4.for i in echo `ipcs|grep 用戶名|cut -d" " -f2`; do ipcrm -s $i; done
更深入的了解:
Oracle 內(nèi)存段參數(shù)設(shè)定: [root@rh7 ~]# sysctl -p net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key error: "net.bridge.bridge-nf-call-iptables" is an unknown key error: "net.bridge.bridge-nf-call-arptables" is an unknown key fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 536870912 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048586