Rで分析しようとしてちょっとハマった
データサイエンティストになりたいと考え最近Rの勉強をしたりしています。
一行目とは全く関係ないですが、最近9G近く準備しているLinux Mintのswapに空きが恒常的に0で、気持ち悪いのでいろいろやっています。
sudo sysctl vm.swappiness=10
を実行しましたが、swapサイズに変化がありませんでした。
swapoff -aをしてswapon -aをするといいよ、という記事を見たので早速実行してみると、確かにswapの割り当てが減っていっている。
が、
お、遅い。
swapのサイズ減少が遅々として進みません。
どれくらいかかるのか気になってRの勉強も兼ねて計算することにしました。
$date +%s;free
というコマンドを複数回実行して、現在時刻とswapのサイズを取得、データを加工して、Rでtsv形式にして読み込んでみました。(今までは計算はLibreOfficeのCalcでやってました)
$cat ~/swapsize.tsv
time swap
1426429000 8812360
1426429006 8811788
1426429012 8809144
1426429015 8808752
1426429019 8803304
1426429029 8798456
これを以下の様にRで読み込みます。
> swapsize=read.table("~/swapsize.tsv",sep="\t",header=T)
で、time-swapsizeのグラフを描いて回帰曲線も描いてみます。
> ggplot(swapsize,aes(x=time,y=swap))+
+ geom_point()+
+ theme_bw(16)+
+ geom_smooth(method="lm")
するとこんなグラフに
何かがおかしい。多分青い線はx軸ではなく、回帰直線。
おそらくtime(UNIX time)の大きさに対してswapの変化量が小さいのが原因かと考え、以下のようにして時間を補正(UNIX timeでなく、経過時間(s)をx軸に採用)
> swapsize$time=swapsize$time-min(swapsize$time)
そしてプロットをし直す。
今度は、そんなもんかなというデータ。ミリ秒とかではなくて1秒というとり方もあってか、綺麗に直線には乗らなかった。
あとはswapさんがいなくなるまでの時間をざるに計算する。まずは回帰直線の傾きと切片を教えてもらう。
> swapsize.lm=lm(swap~time,data=swapsize)
> summary(swapsize.lm)
Call:
lm(formula = swap ~ time, data = swapsize)
Residuals:
1 2 3 4 5 6
-1818.6 666.2 1079.1 2215.6 -1194.5 -947.7
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8814178.65 1258.67 7002.757 2.5e-15 ***
time -509.48 76.91 -6.624 0.00269 **
あとはy(swap)がゼロになる=処理が終わる時間を推測。
y=ax+bでy=0で解くので、今回の場合は0=(time)*x+(intercept)を解いて、秒を3600で割って時間単位に変換する。
$echo "scale=4;8814178.0/509.4/60/60"|bc
4.8064
5時間....だと !!!!
待っていられないので一旦swapoff -aはキャンセルしてすぐにswapon -aを実行。
元に戻しました。
朝起きてみると一旦7.5G付近まで下がっていたswapの使用料が7.8Gまで拡大。今後の経過を見守りたい