164
83

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

フロムスクラッチAdvent Calendar 2016

Day 6

[Linux] メモリ不足の時に、インフラとして対応できる1つのこと

Last updated at Posted at 2016-12-06

この記事はフロムスクラッチ Advent Calendar 2016の6日目の記事です。

想定読者

 1. サーバーとかを立てたことないアプリ開発者
 2. インフラとは何か?と悶々としている人
 3. インフラリソースを気にしない開発者に違和感を感じている人
 4. 業務でLinuxコマンド叩いているけど、必要最低限しか使っていない人

自己紹介

  • ITベンチャー2年目。25歳。
  • インフラエンジニア。
  • 東工大大学院 化学専攻修了。
  • 新薬合成研究から、プログラミングまで。
  • NHK(日本放送協会)大好き♥
  • 東京生まれ。東京育ち。
  • 最近のマイブームは、ランニング。

とある日・・・

A: 「なんか開発環境のバッチが落ちてるんだけど」
B: 「???なんで?」
A: 「とりま、ログみよ。」
A: 「ん・・・あー・・・」

"Cannot allocate memory"
or
"OutOfMemoryError"

こいつのログを見るたびに
憤怒、悲嘆とも言い切れない気持ちになって
叫びたくなる。

訴えてやる.png

メモリ不足の時に、インフラとして対応できる1つのこと

###1. お金を使う。

豚の貯金箱のアイコン.png

極論言うと、これしかない。
サーバーのスペックを上げるだとか、
まぁとはいえ、そんなことも言ってられないので
うーうー言いながら、考えていろいろ対策を考えました。

メモリ不足の時に、インフラとして「それっぽく」対応できる3つのこと

1. メモリを使っているプロセスの特定

# メモリの使用量の確認

free -m

# 実行プロセスのメモリ(RSS)の低い順番に並べる(一番下に一番メモリ使ってる奴が来る)

ps aux --sort rss

とりあえず、これ叩いておけば、だいたいわかる。
/proc/meminfo、とか、vmstatとか色々あるけど
そんなのはまぁドヤ顔するためのただの豆知識。

2. 開発側にpushする

原因となるプロセス特定できた。
あとは、そのプロセスを管理・開発した(してる)人に
直してもらうようにpushするのみ。

3. 無駄なメモリを解放する


# rootユーザーへ変更する
sudo su -

# ダーティー・キャッシュをディスクに落とし込む
sync

# ページキャッシュおよびディレクトリエントリー(dentry) とinode のクリア
echo 3 > /proc/sys/vm/drop_caches

(参照) http://www.shift-the-oracle.com/linux/utility/flush-buffer-cache.html

最終手段。
無駄なメモリがあれば、それを解放する。

最近流行りのRubyを始めとしたLL言語(lightweight language)は、
簡単に書ける一方でその分メモリ管理が非常に雑なところがある。
開発者がちゃんと意識して書かないと、すぐメモリリークetc...により
サーバーのメモリを解放しないで、気づいたら80 ~ 90%になっている。

cf.)
LL言語と言っても
「lightweight programming language」のC言語とかは
まぁある一定難しい分、メモリ管理を適切にできる。(はず)

ちなみに
実際に上記コマンドを実行すると、実行するとこんな感じ。

スクリーンショット 2016-12-06 23.23.51.png (参照)http://grafana.org/

まとめ

正直
「3. 無駄なメモリを解放する」みたいな
「子供(開発者)が出したおもちゃを親(インフラ)片付ける」
ような対応は、どうせすぐまたメモリが溢れてくるし、本質的ではない。

それを開発した(してる)人
もしくは
やったこと無い人、今後引き継ぐ人が対応してこそ初めて
プロダクト的にも、組織的にも価値があるのではないでしょうか。

まぁたぶん開発者も
このクラウドファーストの時代が進んでいくと

  • ログのローテートや退避
  • 監視
  • セキュリティ
  • インフラリソース
    など、インフラを意識した開発をしないと
    これからの開発者は淘汰されていくんじゃないかな。
    「DevOps」「SRE」然り、「OpsDev」とかいう言葉も出てきたし。

Site Reliability Engineering: How Google Runs Production Systems
https://www.amazon.co.jp/Site-Reliability-Engineering-Production-Systems/dp/149192912X
これ読も。

私も「インフラ」だけではなく、頑張らねば(`・ω・´)キリッ

164
83
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
164
83

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?