技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

tasklistコマンドで表示されるメモリ量

Windows上で tasklistコマンドを実行すると、例えば以下のように、プロセスのメモリ量が表示される。

  chrome.exe 11060 Console 1 ★22,748 K 

一方で、タスクマネージャーでは、 メモリ量に関係する項目として以下を表示することができる。

  • ワーキング セット
  • プライベート ワーキング セット
  • 共有ワーキング セット

 

tasklistコマンドで表示されるメモリ量が、タスクマネージャーの表示するどのメモリ量に該当するか調べてみたところ、「ワーキング セット」に該当していた。

なお、「ワーキング セット」の定義は、

ワーキング セット = プライベート ワーキング セット(プロセス固有のメモリ量) + 共有ワーキング セット(他プロセスと共有しているメモリ量)

となっていた。この辺の関係は、以下のMicrosoftのページに説明がある。

メモリ管理と重要なメモリ測定値について理解する

 

つまり、tasklistコマンドが表示するメモリ量は、

  プロセス固有のメモリ量 + 他プロセスと共有しているメモリ量

ということになる。

定期的にメモリ量を取得する。

引数で指定されたPIDを持つプロセスのメモリ量を定期的に出力するbatファイルを作成した。

getMem.bat

@echo off

set pid=%1

:loop
    set /p=%date% %time% <nul,
    tasklist /fo csv /fi "pid eq %pid%" /nh
    timeout 60 > nul
 
goto :loop

メモリ量を取得したいプロセスのPIDを引数にして、例えば、

getMem.bat 9928

と実行すると、以下のように60秒間隔で対象プロセスのメモリ量を取得する。(メモリ値は最後のカラム)

2018/09/17 19:14:51.17 ,"chrome.exe","9928","Console","1","198,056 K"
2018/09/17 19:15:51.16 ,"chrome.exe","9928","Console","1","198,864 K"
2018/09/17 19:16:51.15 ,"chrome.exe","9928","Console","1","198,452 K"
2018/09/17 19:17:03.80 ,"chrome.exe","9928","Console","1","198,784 K"
・・・

上記ようにcsv 形式で出力しているので、これをエクセルで開けばグラフが簡単に描ける。メモリリークの調査などに使用すると便利だと思う。

改行しないechoコマンドもどき

Windowsで改行しないechoを行うための方法について書く。

Windowsで、例えば現在時刻を表示するために、

echo %date% %time%

と実行すると、時刻の後に改行が表示されるので、時刻とそれに続く内容を一行で表示したい時に困る。

これを解決するには、set /p コマンドを使用する。set /p コマンドは、

set /p 入力情報を入れる変数=コマンド実行時の表示文字列

という形式で使用する。この「コマンド実行時の表示文字列」の後には改行が付かないので、それを利用し以下のようにする。

set /p x=%date% %time% <nul

「<nul」は、入力文字列は必要なく、これがないと入力待ちになってしまうので付けている。ちなみに上記では、便宜上、変数 x を使用したが、これを省略した以下でもOKだった。(Windows10で検証済み)

set /p=%date% %time% <nul
set /p<nul=%date% %time%

 

ただ、この方法は、Windows(Microsoft)側が意図した使い方ではないような気がするので、Windowsのバージョンが挙がった際に挙動が変わって使えなくなる可能性もあるかもしれない。

yumコマンドとrpmコマンド

Linux上にパッケージをインストールするには、yumコマンドを使用する方法とrpmコマンドを使用する方法がある。yumコマンドはrpmコマンドの上位コマンドになっており、内部でrpmコマンドを呼んでいる。

また、yumコマンドは、目的のパッケージをインストールする際に、それに必要となるパッケージ(依存パッケージ)もインターネット上のレポジトリから自動的にダウンロードしてインストールしてくれる。この機能はrpmコマンドにはない。

 

ここまで読むと、Linux上にパッケージをインストールする時はyumコマンド一択ではないかと思ってしまうが、例えば、(セキュリティ上の理由により) インターネットから遮断されているイントラ内のLinuxに CD/DVDからパッケージをインストールする時にrpmコマンドを使用するという使い方があると思う。

リバースプロキシ

普通のプロキシとリバースプロキシとの違いについて簡単にまとめる。

一般的に普通のプロキシは、社内からインターネットに出るところに置いて、社員のインターネットへのアクセスを管理したり、アクセス速度向上のためインターネットから取得したコンテンツをキャッシュしたりする。

一方で、リバースプロキシは、インターネット上に公開しているwebサーバの手前に置いて、インターネットからのアクセスのロードバランスやセキュリティチェックなどを行う。

普通のプロキシが「内部⇒外部」の向きであるのに対して、リバースプロキシは「外部⇒内部」という感じで向きが逆なので、「リバース」という名前が付いているのだと思われる。

 

以下のサイトの説明がとても分かりやすかった。

プロキシサーバとリバースプロキシサーバの違い |

 

 

Linuxへの公開鍵のimport

Linux上にrpmパッケージをインストールする際、そのrpmパッケージに電子署名が付与されている場合は、(署名に使われた秘密鍵に対応する) 公開鍵をLinux上にインストールしておくことが必要となる。

その際の方法として、rpm --import コマンドを使用するのと、gpg --import コマンドを使用するものがあるようだ。ネットで調べても、この二つのコマンドの使い分けは分からなかったのだが、

Chapter 4. Importing Custom GPG Keys - Red Hat Customer Portal

によると、Linuxのバージョンによって使い分けるものだと思われる。また、rpm --import を使う方が新しい方法のように読める。

SNMPのOIDのルール

rfc2578 によると、SNMPのOIDには以下の規定がある。

  • サブID(※)は正数
  • サブIDの個数は128個まで
  • サブIDの最大値は 2^32-1 (4294967295)
  • 少なくても2個のサブIDを持つ
  • 最初のサブIDは 0 or 1 or 2

(※)サブIDとは、OIDを構成する各数値のこと。

 

An OBJECT IDENTIFIER value is an ordered list of non-negative
numbers. For the SMIv2, each number in the list is referred to as a
sub-identifier, there are at most 128 sub-identifiers in a value, and
each sub-identifier has a maximum value of 2^32-1 (4294967295
decimal).

All OBJECT IDENTIFIER values have at least two sub-identifiers, where
the value of the first sub-identifier is one of the following well-
known names:

Value Name
  0 ccitt
  1 iso
  2 joint-iso-ccitt

(Note that this SMI does not recognize "new" well-known names, e.g.,
as defined when the CCITT became the ITU.)

RFC 2578 - Structure of Management Information Version 2 (SMIv2)

の「3.5. OBJECT IDENTIFIER values」より抜粋。