Slabのメモリ使用量

SReclaimableとSUnreclaimを足すとSlabになる

[vagrant@localhost python]$ cat /proc/meminfo | grep “Slab\|claim”
Slab: 116948 kB
SReclaimable: 58056 kB
SUnreclaim: 58892 kB

slabの内訳。avtab_nodeが多いか。
[vagrant@localhost python]$ slabtop –once –sort=c | head -n 12
Active / Total Objects (% used) : 1312788 / 1350423 (97.2%)
Active / Total Slabs (% used) : 26234 / 26234 (100.0%)
Active / Total Caches (% used) : 98 / 183 (53.6%)
Active / Total Size (% used) : 97729.34K / 103000.36K (94.9%)
Minimum / Average / Maximum Object : 0.02K / 0.08K / 4096.00K

OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
27184 27184 100% 0.98K 6796 4 27184K ext4_inode_cache
640944 640732 99% 0.02K 4451 144 17804K avtab_node
417872 417265 99% 0.03K 3731 112 14924K size-32
117216 87569 74% 0.10K 3168 37 12672K buffer_head
182 182 100% 32.12K 182 1 11648K kmem_cache

[vagrant@localhost python]$ sync; echo 2 > /proc/sys/vm/drop_caches
-bash: /proc/sys/vm/drop_caches: 許可がありません

何いいいいいいいいいいいい

cat /proc/meminfo

/proc/meminfoは、カーネルが内部的に管理している枠組みでのメモリ情報

[vagrant@localhost python]$ cat /proc/meminfo
MemTotal: 1020076 kB
MemFree: 299244 kB
Buffers: 95364 kB
Cached: 408216 kB
SwapCached: 8328 kB
Active: 147128 kB
Inactive: 429060 kB
Active(anon): 36828 kB
Inactive(anon): 42764 kB
Active(file): 110300 kB
Inactive(file): 386296 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2064380 kB
SwapFree: 1616664 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 65920 kB
Mapped: 16524 kB
Shmem: 6984 kB
Slab: 116968 kB
SReclaimable: 58068 kB
SUnreclaim: 58900 kB
KernelStack: 2016 kB
PageTables: 10412 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2574416 kB
Committed_AS: 1137548 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 12012 kB
VmallocChunk: 34359708156 kB
HardwareCorrupted: 0 kB
AnonHugePages: 12288 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 8128 kB
DirectMap2M: 1040384 kB

Slab: 116968 kB なので、slabはそこそこありますね。

Linux psコマンド

psはLinux上で現在動作しているプロセスを表示するコマンド

[vagrant@localhost python]$ ps
PID TTY TIME CMD
5300 pts/1 00:00:00 ps
32152 pts/1 00:00:01 bash

オプションやgrepなどを組み合わせて使用する

linux free

freeコマンドは空きメモリと使用しているメモリの容量を表示するコマンド

[vagrant@localhost python]$ free
total used free shared buffers cached
Mem: 1020076 720212 299864 6984 94792 408204
-/+ buffers/cache: 217216 802860
Swap: 2064380 447716 1616664

メモリー、swapのused, freeが表示されているのがわかります。

Linux topコマンド

topコマンド
->実行中のプロセスをリアルタイムで表示
->実行中のプロセスをCPU利用率が高い順に表示

[vagrant@localhost python]$ top

top – 22:20:14 up 8 days, 34 min, 1 user, load average: 0.13, 0.30, 0.33
Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1020076k total, 723252k used, 296824k free, 94484k buffers
Swap: 2064380k total, 447716k used, 1616664k free, 408512k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5118 vagrant 20 0 15024 1296 1004 R 0.3 0.1 0:00.80 top
1 root 20 0 19232 604 432 S 0.0 0.1 0:01.64 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:02.98 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
6 root RT 0 0 0 0 S 0.0 0.0 0:01.49 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 6:00.91 events/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events/0
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_long/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_power_ef
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm
16 root 20 0 0 0 0 S 0.0 0.0 0:03.42 sync_supers

これを見ると、top, init, kthreadd の消費が高いですね。

shellでメール送信

シェルでメールを送信したい
mail1.txt

From: hoge@gmail.com
To: hoge@gmail.com
Subject: Hello, e-mail!

Hi, can you see?

[vagrant@localhost python]$ cat mail1.txt |
> sendmail -i -t

i:入力されるメッセージ中の `.’ だけを含む行を無視
t:受け手をメッセージから読み取り

その2

#!/bin/bash

export PATH=$PATH:/usr/sbin

MAIL_TO="ore@gmail.com"
MAIL_FROM="noreply@hogehoge.com"
SUBJECT="テストメール"
DATA="データ"

mail_send () {

CAT << EOD | nkf -j -m0 | sendmail -t
FROM: ${MAIL_FROM}
To: ${MAIL_TO}
MIME-Version: 1.0
Content-Type: text/plain; charset="ISO-2022-JP"
Content-Transfer-Encoding: 7bit

メールが送信されます。
ここに${DATA}が入る

EOD
}

mail_send

exit 0

SQL(DDL, DML, DCL)

DDL, DML, DCLって何?

DDL(Data Definition Language)
CREATEやDROP、ALTERなどデータベースオブジェクトの生成や削除変更を行うコマンド

DML(Data Manipulation Language)
SELECT/INSERT/UPDATE/DELETEなどテーブルに対するデータの取得、追加、更新、削除を行うコマンド

DCL(Data Control Language)
BEGIN, COMMIT、ROLLBACKなどトランザクションを制御するためのコマンド

実務上はあまり使用しない名称だから、こんな言い方もあるんだなー程度か。

KNN(k-近傍法)

特徴空間上において、近くにあるK個のオブジェクトのうち、もっとも一般的なクラスに分類する
距離の算出は、ユークリッド距離が使われる。高次元データには向かない
トレーニングデータ数、特徴量が増えると予測が遅くなる
クラス分類や回帰分析に利用可能

なに。。

Kが小さいとノイズに弱く、Kが大きいと精度が下がる

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split

from sklearn.datasets import load_iris
iris = load_iris()

X = iris.data
Y = iris.target

print("データ数 = %d 特徴量 = %d" % (X.shape[0], X.shape[1]))
pd.DataFrame(X, columns=iris.feature_names).head()

ユークリッド距離

点Aと点Bのユークリッド距離とは、2点を結んだ線分ABの長さのこと

一次元のユークリッド距離は絶対値
|A – B|

二次元だと
√(a1 – b1)^2 + (a2 – b2)^2

うん、こーなるね。

三次元になると、
√(a1 – b1)^2 + (a2 – b2)^2 + (a3 – b3)^2

三平方の定理です。では、これをpythonで計算すると、

import numpy
x1 = 3
y1 = 4
x2 = 4
y2 = 6
a = numpy.array([x1, y1])
b = numpy.array([x2, y2])
u = b - a
print(numpy.linalg.norm(u))

[vagrant@localhost python]$ python myapp.py
2.23606797749979

なんだこれは。
numpy.linalgは固有値、固有ベクトルの計算
normはノムル

ユークリッド距離は何に使われるかというと
k-nearest neighbor algorithm ※k-nn
パターン認識で使われる。

なるほど、確かに距離の計算をしている、ということはわかる。

関数の絶対値

関数の絶対値、ということは、二次関数、三次関数などの絶対値ってことだな。

import numpy as np 
import matplotlib.pyplot as plt 

pi = 2 * np.pi

x = np.arange(0, 2*pi, 0.1)
y1 = np.sin(x)
y2 = np.abs(np.sin(x))

fig = plt.figure()
ax = fig.add_subplot(111)
ax.grid()
ax.set_xlabel("x", fontsize=16)
ax.set_ylabel("y", fontsize=16)
ax.set_xlim(0, 2*pi)
ax.set_ylim(-1.5, 1.5)
ax.set_xticks([0, pi/2, pi, 3*pi/2, 2*pi])
ax.set_xticklabels(["0", "$\pi/2$", "$\pi$", "$3\pi/2$", "$2\pi$"],
				fontsize = 12)

ax.plot(x, y1, linestyle = "--", color = "blue", label = "y = sinx")
ax.plot(x, y2, color = "red", label = "y = |sinx|")
ax.legend()

plt.savefig("01", bbox_inches = "tight")

まじかー、これ。うーん、なんだかな。。