日々精進

新しく学んだことを書き留めていきます

docker buildに失敗した場合のデバッグ方法

IT

以下手順でビルド失敗時点のコンテナに入れるのでそこで手動でコマンドを実行して調査する。 以下を実行して一番上のコンテナのIDをコピーする。 docker ps -a コピーしたIDを以下のコマンドに入れて実行する docker commit <ID> debug && docker run -it debug </id>…

@dataclassでクラス変数を定義する

IT

以下のようにtyping.ClassVarでラップすればいい。 @dataclass class TestClass: var1: ClassVar[str] = "class" 参考: qiita.com

CenterNetをインストールしようとすると「nvcc: command not found」エラー

AI

CenterNetのインストール手順にmake.shを実行する手順があるが、これを実行すると「nvcc: command not found」エラーが発生した。 https://github.com/xingyizhou/CenterNet/blob/master/readme/INSTALL.md nvccはcudaのコンパイラで、cuda toolkitに含まれ…

find実行時に「Permission denied」が沢山出て困る

IT

以下のようにすればPermission deniedを非表示にできる。 find / -name art 2>&1 | grep -v "Permission denied" 参考: unix.stackexchange.com

DockerfileのENVで定義した環境変数をsshでログインした時に引き継ぐ

IT

基本はdokcer-composeのcommandを以下のようにして/etc/environment に環境変数を吐いておけば良い。 command: > bash -c 'printenv | grep -v "HOME" >> /etc/environment && /bin/bash' ただし、これはPATHなどの元々ある環境変数には効かないので、PATHを…

Dockerfile内でずっとbashを使う

IT

SHELL ["/bin/bash", "-c"] を使えばshellをbashに変更出来る。 ubuntuの/bin/shはsourceコマンドが使えなかったりして勝手が違うので助かる。 参考: qiita.com

git cloneを実行すると「fatal: unable to access ~ Received HTTP code 503 from proxy after CONNECT」エラー

IT

原因は git clone http:s//https://github.com/tensorflow/tensorflow のようにwebページのURLを指定してしまっていたため。 git clone http:s//https://github.com/tensorflow/tensorflow.git のように.gitを付けると直った。git cloneコマンドでcloneする…

ubuntuでsshdを起動する

IT

sudo /etc/init.d/ssh start で起動出来る。最近centosから乗り換えてるけど違いが色々あるなぁ。。 参考: qiita.com

ubuntuでgcc-c++をインストールする

IT

gcc-c++はcentosでの名前で、ubuntuの場合はbuild-essentialに含まれるのでこれをインストールすればいいらしい。 参考: c.keicode.com

conda activateを実行すると「CommandNotFoundError 」エラー

IT

ubuntuの場合は以下のようにconda.shを読み込む行を.bashrcに追加すればいい。 . /etc/profile.d/conda.sh 参考: qiita.com

ubuntuで「/bin/sh: 1: source: not found」エラー

IT

ubuntuの/bin/shにはsourceコマンドがない。 . ~/.bashrc のように代わりにドットを使えばいい 参考: blog.aoshiman.org

docker runを実行したら「no basic auth credentials」エラー

IT

原因はAWS ECRからイメージを取得しようとしてたけど、ECRにログインしてなかったこと。 以下でECRにログインしたら直った。 aws configure (アクセスキーなどを入力) aws ecr get-login --no-include-email --region ap-northeast-1 (上記コマンドで出力…

conda env create~を実行すると「ERROR: Could not find a version that satisfies the requirement 」エラー

AI

原因はメッセージの通り指定したバージョンがないことだけど、今回conda env createで使ったファイルは既存の仮想環境から exportしたものだったのでびっくりした。 pythonだとパッケージのバージョンが消えることがあるのか。。 今回はpytorchの0.4.1.post2…

shell scriptファイルを実行すると「: No such file or directory」エラー

IT

実行するshell scriptのパスを間違えたのかと思ったけど、それは確実に存在する。。 原因は改行コードがCRLFになっていることだった。 WindowsPCからSCPでファイルをLinuxサーバにアップロードして、それを実行するとこの現象起きやすいので気をつけないと。…

pip install pycocotoolsを実行すると「gcc: error: pycocotools/_mask.c: No such file or directory」エラー

AI

pip install cython でcythonをインストールすると直る。 参考: github.com

Linuxで容量が大きいフォルダ一覧を出す

IT

以下のコマンドで容量が大きい順に40フォルダを出せる。便利でした。 sudo du -x -h / | sort -r -h | head -40 参考: tackeyy.com

resize2fsを実行すると「Couldn't find valid filesystem superblock.」エラー

IT

XFSではresize2fsは利用できないのが原因。 以下のようにxfs_growfs を使えばいい。 sudo xfs_growfs /dev/nvme0n1p1 参考: qiita.com

pythonでログにstacktraceを出力する

AI

以下のようにexc_info=Trueを指定すると例外をraiseしたところからのスタックトレースを出力してくれる。 catchした例外オブジェクトを渡さなくてもいいんだね。 logger.info("hmm", exc_info=True) 参考: qiita.com docs.python.org

SQL Alchemyで実行されたSQL文をログに出す

AI

以下のようにconfigを設定すればいい。 app = Flask(__name__) app.config["SQLALCHEMY_ECHO"] = 1 他にも色々とflaskに設定できる項目があるので詳細は以下参照。 flask-sqlalchemy.palletsprojects.com

pandasのto_csvで出力したcsvファイルをエクセルで開くと文字化けする問題

AI

原因はto_csvで出力されるファイルがBOM無しUTF8で、エクセルはBOM付きでないと開けないため。 毎回BOMを付けるのは面倒なので、エクセルでしか見ないならto_excelでエクセルファイルを開いた方が楽。 pandasから読み込むのもパッケージを入れればできる。 …

tty:trueにしてもDockerコンテナが起動しっぱなしにならない

IT

原因はcommandが定義されていないことだった。 以下のようにdocker-composeファイルにcommandが定義されてないと起動後すぐに停止してしまう。 services: service: command: /bin/bash tty: true 参考: qiita.com

psコマンドの実行結果が見きれる

IT

javaアプリなんかは起動引数がめっちゃ長くなることが多い。 そういう場合、psを普通に実行すると起動引数が見切れる。ps wwのようにwwオプションを使うと見切れず折り返してくれる。 参考: www.itmedia.co.jp

Javaアプリのメモリリーク調査方法

IT

以下の二つのやり方がある。 メモリダンプを取る 以下のコマンドでダンプを取る。 jmap -dump:format=b,file=heap.bin <PID> Eclipse Memory Analyzerでダンプを見る。 参考: hkawabata.github.io Java Flight Recorderでログを取る こっちの方がより詳細な情報</pid>…

メモリのDocker Cache領域はメモリが足りなくなったらすぐ解放されるので増えても問題無い

IT

本番環境のメトリクスを見ていたら、メモリのDocker Cache領域がどんどん増えているので焦ったがこの領域はIOのキャッシュのための領域でほかのプロセスがメモリを確保しようとしたらすぐに解放してくれるので増えても問題無いっぽい。 Docker Cacheが増えて…

github上で二つのブランチ・タグ・コミットなどの間の差分を見る

IT

やり方は以下参照。チームメンバーにリリースされた差分を示すときに便利でした。 kanonji.hatenadiary.com

Javaアプリの起動引数-Xmsで指定したメモリ量とJavaアプリが使用しているメモリ量が異なる。

IT

よくあるプラクティスとして-Xmsと-Xmxの値を同じにしてJavaアプリ起動時に一括でメモリを確保させるというのがある。 それをやると、Javaアプリ起動時から常に一定量のメモリが使用中になると思っていたがそういう挙動にならなかったのでその原因を調査した…

エクセルで、フィルタで非表示になった行を除いて平均を取る

IT

AGGREGATE関数を使えばできる。 以下のように非表示行を無視するオプションをつければいい。 AGGREGATE(1, 5, A:A) オプションの数値の意味は以下参照。この関数便利だなぁ。。 dekiru.net

DataFrameのデータを見やすくログに出す

AI

tabulateパッケージを使えばできる。 でもコードは以下のように長くなる。。まあ普段はprint(df)でいいかな。 print(tabulate(df, headers='keys', tablefmt='psql')) 参考: stackoverflow.com

pd.cutの端っこの閾値を∞にしたい

AI

以下のようにfloat("inf")を閾値にすればいい。 pd.cut(df, [0, 1, float("inf")]) 参考: stackoverflow.com

xargsで処理する対象のファイル名に半角スペースが入っていて正しく処理できない

IT

xargsはデフォルトで半角スペースを区切り文字としてinputを分割してしまうので、 分割させないよう例えば以下のようにdelimiterを改行にしてやればいい | xargs -d '\n' 参考: stackoverflow.com