vagrantに立てたRStudio Server(立て方は前回の記事参照)になんかパッケージ入れようとした時の話。
現象発生
とりあえずdevtools
でも入れてみようと思って、
> install.packages("devtools")
とやるとつらつら出力が出て、特にエラーもなく最後まで行き着きます。
よしよし、インストールできた、と思って呼び出そうとすると、
> library(devtools) Error in library(devtools) : there is no package called ‘devtools
あれっ?
そんなパッケージはないといわれます。なんで。。
何度繰り返してみても、インストールは失敗してないっぽいのに、
なぜかパッケージはない、と言われます。
むむ。
調査
ためしにverbose=TRUE
を指定してみても、以下のような感じで、
succeeded
って出ていて成功してるようにしか見えません。
> install.packages("devtools", verbose=TRUE) ... 1): succeeded '/usr/lib/R/bin/R CMD INSTALL -l '/home/vagrant/R/x86_64-pc-linux-gnu-library/3.1' /tmp/RtmpXXXXXX/downloaded_packages/devtools_1.5.tar.gz' The downloaded source packages are in ‘/tmp/RtmpXXXXXX/downloaded_packages’
一方で、パッケージがインストールされる場所にちゃんとあるか見に行ってみます。
パッケージがインストールされる場所は、ヘルプによると、.libPaths()[1]
です。
> ?install.packages ... Arguments: ... lib: character vector giving the library directories where to install the packages. Recycled as needed. If missing, defaults to the first element of ‘.libPaths()’.
でも実際、そこに行っても何のファイルもありませんでした。
> list.files(.libPaths()[1]) character(0)
むむむ。。
原因判明
うー、これはおかしい、と思って数時間悩んだ挙句、
syslogになんか出てないかなーと思ったら…
出てました。
May 3 12:36:48 vagrant-ubuntu-trusty-64 kernel: [ 2567.673177] R invoked oom-killer: gfp_mask=0x503da, order=0, oom_score_adj=0
RがOOM killerにやられてました。なんと。。
Rのトリッキーな出力に騙されて右往左往しましたが、メモリ不足、という単純な話でした。
恥ずかしい。。
解決策
ということでメモリを増やしてvagrantを再起動します。
まず、Vagrantfileに以下を追記します。
(メモリ量は適当に。私の場合は、デフォルトの1GBで足りなかったのでとりあえず2倍の2GBにしています)
config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "2048"] end
vagrant reload
で、再度install.package
すると無事成功しました。
めでたしめでたし!
まとめ
- Rの出力は信用ならない(
succeeded
というログは何だったのか…) - RStudio Serverはけっこうメモリを食う?
- vagrantには十分なメモリを与えたほうがいい