[Linux] Linuxリソース情報取得


個人メモです。まだまとまってないため随時更新予定。（動作確認はcentos7.6）

=======================================================================
#●全般
~~~
top
~~~

=======================================================================
#●CPU
~~~
cat /proc/cpuinfo
~~~
(抜粋)CPUの型番
model name      : Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz
(抜粋)OSが認識しているCPU数（論理数）
processor       : 0
processor       : 1
=======================================================================
#●メモリ
##全体

#####○free

~~~
free -m
~~~
-m	表示結果をメガバイト単位で表示。
-s 秒数	指定した秒数ごとに表示。
-t	物理メモリとスナップの合計も表示。

~~~
vmstat -n -S m
~~~

#####○より詳細な確認

~~~
cat /proc/meminfo
~~~
MemTotal:        8069288 kB　　カーネルが認識している全物理メモリ
MemFree:         6269572 kB　　いかなる用途にも使われていないメモリ


~~~
---------------------------------------------
|            Buffers / Cached               | 
---------------------------------------------
| Active(file) / Inactive(file) |   Shmem   |
---------------------------------------------

Buffers + Cached = Active(file) + Inactive(file) + Shmem

--------------------------------------------------
|           Active(anon) + Inactive(anon)        | 
--------------------------------------------------
|   Shmem   |          AnonPages              |??|
--------------------------------------------------

Active(anon) + Inactive(anon) = Shmem + AnonPages

-----------------------------------------------------------------------------
|            Buffers / Cached               |           AnonPages        |??|
-----------------------------------------------------------------------------
| Active(file) + Inactive(file) |        Active(anon) + Inactive(anon)      | 
-----------------------------------------------------------------------------
|                               |   Shmem   |                               |
-----------------------------------------------------------------------------

---------------------------------------------------------------------------------
|            Buffers / Cached           |        AnonPages                   |??|
---------------------------------------------------------------------------------
| Active(file) + Inactive(file)  | Unevictalbe |  Active(anon) + Inactive(anon) |
---------------------------------------------------------------------------------
~~~

##プロセスごと

#####○ps　（参考程度？）
psはプロセスの実際のメモリ使用量でなく、
実行中のプロセスが1つだけである場合に各プロセスが占有する実メモリの量とのこと。（通常数十のプロセスが実行）

[How to measure actual memory usage of an application or process?][m1]
[m1]:https://stackoverflow.com/questions/131303/how-to-measure-actual-memory-usage-of-an-application-or-process

~~~
ps aux
ps aux | grep postgre | awk '{sum += $6}END{print sum}'
~~~
名称	意味
VSZ (virtual set size)	仮想メモリ
RSS (Resident set size)	物理メモリの消費量
PSS (proportional set size)	プロセスが実質的に所有しているメモリ
USS (unique set size)	ひとつのプロセスが占有しているメモリ

#####○pmap -x <PID>
アドレス空間マッピング情報とメモリ割り当ての量
~~~
pmap -x <PID>
~~~
# pmap -x 7876
7876:   python3
Address           Kbytes     RSS   Dirty Mode  Mapping
0000000000400000       4       0       0 r-x-- python3.6
0000000000601000       4       4       4 r---- python3.6
0000000000602000       4       4       4 rw--- python3.6


#####○cat /proc/<pid>/smaps

~~~
ps -ef | grep [確認したいプロセス名]
cat /proc/<pid>/smaps
~~~
cat /proc/7876/smaps
00400000-00401000 r-xp 00000000 fd:00 55039406                           /usr/bin/python3.6
Size:                  4 kB
Rss:                   0 kB
Pss:                   0 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         0 kB
Referenced:            0 kB
Anonymous:             0 kB
AnonHugePages:         0 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB

Shared_Clean と Shared_Dirty は他のプロセスと共有している値
Private_Clean と Private_Dirty の合計が、各プロセスが独自に確保したメモリ領域

~~~
cat /proc/<PID>/smaps | egrep 'Private_Clean|Private_Dirty' | awk '{sum += $2}END{print sum}'
cat /proc/1111/smaps | awk '/^Rss/{sum += $2}END{print sum}'
cat /proc/1111/smaps | awk '/^Pss/{sum += $2}END{print sum}'
~~~


======================================================================
#●ストレージ(容量)
⇒容量
物理ストレージ
認識しているデバイスとその容量を確認

~~~
fdisk -l
~~~
パーティションの容量とファイルシステムを確認

~~~
df -Th
~~~
マウントディレクトリ内で何がどれだけ容量を食っているか

~~~
du -k
~~~
ファイル単位

~~~
ls -l
~~~

●ストレージ(I/O)
○全デバイスへの全 I/O の合計

~~~
vmstat
~~~

○デバイスごとの I/O レポートティング	IOPSの確認

~~~
iostat
cat /proc/diskstats
~~~

~~~
Bandwidth
iotop
~~~

○

~~~
blktrace 
~~~

=======================================================================
#●ネットワーク
○IPアドレス

~~~
ip -4 a
~~~

○ルーティングテーブル

~~~
route -rn
/proc/net/route
~~~

○疎通
~~~
ping
nc -vz [ip] [port]
~~~

○送受信のバイト数/パケット数、破棄パケット数、エラーパケット数

~~~
ifconfig
/proc/net/dev
/sys/class/net/$INTERFACE/statistics
~~~

○秒換算で確認
iftop
ifstat

○ネットワークのリンクアップ状況や認識速度の確認

~~~
ethtool
mii-tool
~~~

○使用NICの確認
それぞれのNICごとに確認しどのNICにて表示されるか確認

~~~
tcpdump -n -i eth0 dst port 9403 or src port 9403
tcpdump -n -i lo dst port 9403 or src port 9403
~~~
※ループバックインターフェースのみ通信が発生していれば、ループバック通信となる
　但し、サーバに付与されているパブリックIPあての通信がループバックになるが、
　TCP通信における動作ですので、OS依存となることに注意

=======================================================================
#●デバイス
~~~
lspci
~~~

#●環境変数

### PIDが認識する環境変数の確認
~~~
/proc/<PID>/environ
~~~