GNU/Linux >> Linux の 問題 >  >> Linux

ノードの再起動後の /dev/shm 権限の変更

共有メモリは、プロセス間で状態を共有する方法です。共有メモリは、その名前が示すように、プロセス間でデータを「共有」する方法です。どちらのプロセスも同じメモリ領域を「共有」として定義し、そこに書き込むだけで情報を交換できます。これは、プロセス間でネットワークまたはパイプベースのメッセージを送信する代替手段よりも高速です (以前はそうでしたが、現在でも多少は高速です)。

メモリをデータを格納する手段と見なす場合、ファイル システム上のファイルは共有メモリ (つまり、共有ファイル) と見なすことができます。共有メモリを説明するのは困難です。 1つのプロセスに属していますか?両方?ない?複数のプロセスに属するメモリを単純に合計すると、ひどく「過大評価」します。

名前が示すように、共有 (仮想) メモリは、複数のプロセスによって共有され、複数のプログラムで同時に使用できる仮想メモリを指します。仮想メモリを使用すると、プロセスは個別の (仮想) アドレス空間を持つことができますが、メモリを共有するためにプロセスが必要になる場合があります。共有メモリ (SHM) はプロセス間通信 (IPC) のもう 1 つの方法であり、複数のプロセスが単一のメモリ チャンクを共有して通信します。

共有メモリは、プロセスが相互に大量のデータを渡す最速の方法を提供します。 /dev/shm は、従来の共有メモリの概念の実装に他なりません。これは、プログラム間でデータを渡す効率的な手段です。 1 つのプログラムがメモリ部分を作成し、他のプロセス (許可されている場合) がアクセスできます。これにより、Linux での速度が向上します。

問題

サーバーを再起動するたびに、/dev/shm パーミッションが変更されます:

$ ls -alrt /dev/ | grep shm
drwxr-xr-t. 2 root root 60 jul 6 11:14 shm 

元の許可(1777):

# ls -ld /dev/shm
drwxrwxrwt. 2 root root 200 Aug 20 03:44 /dev/shm

既存の許可 (1754):

$ ls -alrt /dev/ | grep shm
drwxr-xr-t. 2 root root 60 jul 6 11:14 shm

解決策

この問題の原因は、既存の initscripts パッケージ [initscripts-9.49.37-1.0.1.el7_3.1.x86_64] にあります。

回避策

ステップ 1 :サービスをマスクします( rhel-import-state):

# systemctl mask rhel-import-state

ステップ 2 :サービスの状態を確認してください。以下のようになります:

rhel-import-state.service
  Loaded: masked (/dev/null; bad) <<  Active: active (exited) since Fri 2017-07-21 18:28:05 EDT; 2 weeks 3 days ago
 Main PID: 600 (code=exited, status=0/SUCCESS)
  CGroup: /system.slice/rhel-import-state.service

ステップ 3 :マシンを再起動し、同じ問題が再発するかどうかを確認してください。

注意 :これは回避策のアクション プランです。恒久的な解決策として、CentOS/RHEL7 update 4 に含まれている initscripts パッケージのバージョンを 9.49.39-1.0.1 にアップグレードしてください。

変更を元に戻す

以下のコマンドを実行してマスクされたサービスのマスクを解除することにより、変更を元に戻すこともできます。

# systemctl unmask rhel-import-state.service
# systemctl status rhel-import-state.service


Linux
  1. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  2. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  3. / dev/randomと/dev/ urandomをいつ使用するか?

  1. Node.jsの競合:/ sbin/nodeと/usr/ bin / node?

  2. /dev/dm-Z デバイスから /dev/sdX および /dev/mapper/mpathY デバイスをマップする方法

  3. /dev/random または /dev/urandom を base64 でエンコードする方法は?

  1. /dev/mem とは何ですか?

  2. Linux ramdisk (/dev/ram0 - /dev/ram15) の量とサイズを変更するにはどうすればよいですか?

  3. カーネル:/dev/kmem と /dev/mem を無効化