當前位置:首頁 » 操作系統 » linux內存共享

linux內存共享

發布時間: 2022-05-15 14:57:53

A. linux查看共享內存命令

共享內存查看
使用ipcs命令,不加如何參數時,會把共享內存、信號量、消息隊列的信息都列印出來,如果只想顯示共享內存信息,使用如下命令:
[root@localhost ~]# ipcs -m

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 1867776 root 600 393216 2 dest
0x00000000 1900545 root 600 393216 2 dest
0x00030021 1703938 zc 666 131104 1
0x0003802e 1736707 zc 666 131104 1
0x00030004 1769476 zc 666 131104 1
0x00038002 1802245 zc 666 131104 1
0x00000000 1933318 root 600 393216 2 dest
0x00000000 1966087 root 600 393216 2 dest
0x00000000 1998856 root 600 393216 2 dest
0x00000000 2031625 root 600 393216 2 dest
0x00000000 2064394 root 600 393216 2 dest
0x0014350c 2261003 cs 666 33554432 2
0x00000000 2129932 root 600 393216 2 dest
0x00000000 2162701 root 600 393216 2 dest
0x00143511 395837454 root 666 1048576 1
其中:
第一列就是共享內存的key;
第二列是共享內存的編號shmid;
第三列就是創建的用戶owner;
第四列就是許可權perms;
第五列為創建的大小bytes;
第六列為連接到共享內存的進程數nattach;
第七列是共享內存的狀態status。其中顯示「dest」表示共享內存段已經被刪除,但是還有用戶在使用它,當該段內存的mode欄位設置為SHM_DEST時就會顯示「dest」。當用戶調用shmctl的IPC_RMID時,內存先查看多少個進程與這個內存關聯著,如果關聯數為0,就會銷毀這段共享內存,否者設置這段內存的mod的mode位為SHM_DEST,如果所有進程都不用則刪除這段共享內存。

B. linux內核如何勾選共享內存

所謂共享內存就是使得多個進程可以訪問同一塊內存空間,是最快的可用IPC形式。是針對其他通信機制運行效率較低而設計的。往往與其它通信機制,如信號量結合使用,來達到進程間的同步及互斥。其他進程能把同一段共享內存段「連接到」他們自己的地址空間里去。所有進程都能訪問共享內存中的地址。如果一個進程向這段共享內存寫了數據,所做的改動會即時被有訪問同一段共享內存的其他進程看到。共享內存的使用大大降低了在大規模數據處理過程中內存的消耗,但是共享內存的使用中有很多的陷阱,一不注意就很容易導致程序崩潰。

1.超過共享內存的大小限制?

在一個linux伺服器上,共享內存的總體大小是有限制的,這個大小通過SHMMAX參數來定義(以位元組為單位),您可以通過執行以下命令來確定 SHMMAX 的值:

# cat /proc/sys/kernel/shmmax

如果機器上創建的共享內存的總共大小超出了這個限制,在程序中使用標准錯誤perror可能會出現以下的信息:

unable to attach to shared memory

>解決方法:

1、設置 SHMMAX

SHMMAX 的默認值是 32MB 。一般使用下列方法之一種將 SHMMAX 參數設為 2GB :

通過直接更改 /proc 文件系統,你不需重新啟動機器就可以改變 SHMMAX 的默認設置。我使用的方法是將以下命令放入 />etc/rc.local 啟動文件中:

echo "2147483648" > /proc/sys/kernel/shmmax

您還可以使用 sysctl 命令來更改 SHMMAX 的值:sysctl -w kernel.shmmax=2147483648

最後,通過將該內核參數插入到 /etc/sysctl.conf 啟動文件中,您可以使這種更改永久有效:echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf

2、設置 SHMMNI

C. 如何設置linux的共享內存

首先先使用shmget建立一塊共享內存,然後向該內存中寫入數據並返回該共享內存shmid
使用另一個程序通過上一程序返回的shmid讀該共享內存內的數據
建立共享內存並寫入數據的程序

#include<stdio.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdlib.h>
#include<errno.h>
voidget_buf(char*buf)
{
inti=0;
while((buf[i]=getchar())!=' '&&i<1024)
i++;
}
intmain(void)
{
intshmid;
shmid=shmget(IPC_PRIVATE,sizeof(char)*1024,IPC_CREAT|0666);
if(shmid==-1)
{
perror("shmget");
}
char*buf;
if((int)(buf=shmat(shmid,NULL,0))==-1)
{
perror("shmat");
exit(1);
}
get_buf(buf);
printf("%d ",shmid);
return0;
}
讀取數據的程序
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdlib.h>
intmain(intargc,char**argv)
{
intshmid;
shmid=atoi(argv[1]);
char*buf;
if((int)(buf=shmat(shmid,NULL,0))==-1)
{
perror("shmat");
exit(1);
}
printf("%s ",buf);
shmdt(buf);
return0;
}

命令行的第一個參數設為第一個程序輸出的數字

使用完以後可以使用
ipcrm -m 19562507
來刪除該共享內存

D. 一般來說,在linux中使用共享內存的流程應該怎樣

可以使用samba協議。Samba是在Linux和UNIX系統上實現SMB協議的一個免費軟體,由伺服器及客戶端程序構成。SMB是一種在區域網上共享文件和列印機的一種通信協議,它為區域網內的不同計算機之間提供文件及列印機等資源的共享服務。具體配置步驟如下:
步驟1:安裝samba
sudo apt-get install samba samba-common-bin
步驟2:新建共享目錄並設置許可權
sudo mkdir /home/share
sudo chmod 777 /home/share
步驟3:修改配置文件
sudo nano /etc/samba/smb.conf
在smb.conf最後添加:
[share]
path = /home/share
browseable = yes
writable = yes
comment = smb share test
public = no#yes無需密碼 no需要密碼
步驟4:添加遠程訪問用戶
sudo useradd smbuser
sudo smbpasswd -a smbuser
步驟5:重新啟動服務
sudo service samba restart
對於windows操作系統,在資源管理器里輸入\\Linux的IP地址,會提示輸入上述步驟設置的用戶名和密碼,輸入正確後即可訪問分享內容。

E. 如何設置LINUX的共享內存

我們可以修改shmmax內核參數,使SGA存在於一個共享內存段中。
通過修改/proc/sys/kernel/shmmax參數可以達到此目的。
[root@neirong root]# echo 1073741824 > /proc/sys/kernel/shmmax
[root@neirong root]# more /proc/sys/kernel/shmmax
1073741824這里設為1G。
對於shmmax文件的修改,系統重新啟動後會復位。可以通過修改 /etc/sysctl.conf 使更改永久化。
在該文件內添加以下一行 kernel.shmmax = 1073741824 這個更改在系統重新啟動後生效.
1、設置 SHMMAX
SHMMAX
參數定義共享內存段的最大尺寸(以位元組為單位)。在設置 SHMMAX 時,切記 SGA 的大小應該適合於一個共享內存段。 SHMMAX 設置不足可能會導致以下問題:
ORA-27123:unable to attach to shared memory segment
您可以通過執行以下命令來確定 SHMMAX 的值:
# cat /proc/sys/kernel/shmmax
33554432
SHMMAX 的默認值是 32MB 。我一般使用下列方法之一種將 SHMMAX 參數設為 2GB :
通過直接更改 /proc 文件系統,你不需重新啟動機器就可以改變 SHMMAX 的默認設置。我使用的方法是將以下命令放入 /etc/rc.local 啟動文件中:
# >echo "2147483648" > /proc/sys/kernel/shmmax
您還可以使用 sysctl 命令來更改 SHMMAX 的值:
# sysctl -w kernel.shmmax=2147483648
最後,通過將該內核參數插入到 /etc/sysctl.conf 啟動文件中,您可以使這種更改永久有效:
# echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf
2、設置 SHMMNI
我們現在來看 SHMMNI 參數。這個內核參數用於設置系統范圍內共享內存段的最大數量。該參數的默認值是 4096 。這一數值已經足夠,通常不需要更改。
您可以通過執行以下命令來確定 SHMMNI 的值:
# cat /proc/sys/kernel/shmmni
4096
3、設置 SHMALL
最後,我們來看 SHMALL 共享內存內核參數。該參數控制著系統一次可以使用的共享內存總量(以頁為單位)。簡言之,該參數的值始終應該至少為:
ceil(SHMMAX/PAGE_SIZE)
SHMALL 的默認大小為 2097152 ,可以使用以下命令進行查詢:
# cat /proc/sys/kernel/shmall
2097152
SHMALL 的默認設置對於我們的 Oracle9 i RAC 安裝來說應該足夠使用。
注意: 在 i386 平台上 Red Hat Linux 的 頁面大小 為 4096 位元組。但是,您可以使用 bigpages ,它支持配置更大的內存頁面尺寸。

F. LINUX共享內存如何實現

首先,美化Linux並啟動橋接器。SAMBA服務可以在Linux環境中共享。

熱點內容
網上買了伺服器怎麼在電腦連接失敗怎麼辦 發布:2024-10-10 21:18:35 瀏覽:961
安卓息屏壁紙在哪個文件夾 發布:2024-10-10 21:11:58 瀏覽:406
eer資料庫 發布:2024-10-10 21:06:08 瀏覽:707
ftp匿名用戶上傳 發布:2024-10-10 21:06:06 瀏覽:753
凱越原始密碼多少 發布:2024-10-10 21:06:04 瀏覽:192
捏脆泥解壓 發布:2024-10-10 20:56:25 瀏覽:704
開瀏覽器顯示腳本錯誤信息 發布:2024-10-10 20:48:14 瀏覽:8
wii安卓模擬器怎麼用 發布:2024-10-10 20:47:35 瀏覽:500
制度宣傳視頻腳本 發布:2024-10-10 20:34:05 瀏覽:575
如何用電腦主機搭建伺服器 發布:2024-10-10 20:08:25 瀏覽:643