20190228のLinuxに関する記事は5件です。

google-fluentdのログが容量食いまくってた

概要

GCEで稼働しているサーバ(CentOS7)のディスクが妙に減っているので、見てみたところgoogle-fluentdが悪さしていた。

ディスクの容量確認

rootボリュームとして50GBのPersistent Diskをアタッチしている。
Apache+Tomcatが稼働していて、Tomcatとかのログローテも入れてるのに妙に容量食っている。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sda1         50G   20G   31G   40% /
devtmpfs         3.6G     0  3.6G    0% /dev
tmpfs            3.6G     0  3.6G    0% /dev/shm
tmpfs            3.6G  337M  3.3G   10% /run

どこが容量を食っているか調べる

あれ?どこもたいして容量食ってなくない?っていうか全然数字が合わなくない?

# du -sh /*
0   /bin
88M /boot
0   /dev
34M /etc
221M    /home
0   /lib
0   /lib64
0   /media
0   /mnt
1.6G    /opt
0   /proc
200K    /root
337M    /run
0   /sbin
0   /srv
0   /sys
96K /tmp
2.0G    /usr
1007M   /var

原因を調べる

lsでも出てこないし、どういうことだ・・・と思って、ファイルディスクリプタを確認。

google-fluentdお前か!

# ls -al /proc/*/fd/* | grep deleted

l-wx------ 1 root    root    64  2月 23 15:31 /proc/6733/fd/7 -> /var/log/google-fluentd/google-fluentd.log.1 (deleted)

対応方法

google-fluentdを再起動

# systemctl restart google-fluentd

解決

# df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/sda1         50G  4.8G   46G   10% /
devtmpfs         3.6G     0  3.6G    0% /dev
tmpfs            3.6G     0  3.6G    0% /dev/shm
tmpfs            3.6G  337M  3.3G   10% /run
tmpfs            3.6G     0  3.6G    0% /sys/fs/cgroup
tmpfs            732M     0  732M    0% /run/user/1007
tmpfs            732M     0  732M    0% /run/user/1002
tmpfs            732M     0  732M    0% /run/user/0
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Webサーバ起動

よく使うものでよく忘れるのでメモ

起動

httpd,mysqlなどを行う

■CentOS7以上
systemctl start サービス名.service
■CentOS7以下
service サービス名 start

停止

■CentOS7以上
systemctl stop サービス名.service
■CentOS7以下
service サービス名 stop

再起動

■CentOS7以上
systemctl restart サービス名.service
■CentOS7以下
service サービス名 restart

その他

service httpd restart
または
/etc/init.d/httpd restart

再起動コマンドが効かない場合、以下のコマンドである可能性があります。(CentOSのバージョンの違いなど)
apachectl restart
apache2ctl restart

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gdbでC/C++のデバッグ

Segmentation fault (コアダンプ)

LinuxでCやC++を書いていると必ずといっていいほど悩まされるこのメッセージ
エラーの原因がterminalに直接出力されないので、コードをトレースしなければなりません。

しかし、gdbというツールを使うことによってその面倒な作業をしなくて済むようになるのです。

gdbとは

https://ja.wikipedia.org/wiki/GNU%E3%83%87%E3%83%90%E3%83%83%E3%82%AC

GNUデバッガ(単にGDBとも)は、GNUソフトウェア・システムで動く標準のデバッガである。 これは、多くのUnix系システムで動作可能な移植性の高いデバッガであり、Ada、C言語、C++、FORTRAN、FreeBASICといったプログラミング言語に対応している。

eclipseやVisual StudioとかのIDEでは標準でデバッガが使えるようになっていますが、Linuxでも同じようにCやC++のデバッグが使えるというわけです。

使い方

Lambda:11   Em:1.01 ARI:0
Lambda:11   Em:1.02 ARI:0.290903
Segmentation fault (コアダンプ)

現在私はクラスタリング(機械学習手法の一種)を行うプログラムを書いているのですが、動かしているとこのようになってしまいました。
includeしているファイルを含めると結構な行数ですので、コードだけを見てどこが原因なのか突き止めるのは大変そうです...

ここでgdbの登場です。

まずコンパイルオプションに「-g」を付けてコンパイルします。

g++ efcma_main_2d-Gaussian-2clusters.cxx -g -o

多くのLinuxではデフォルトCoreDump機能を無効にしてあるため、有効にします。

ulimit -c unlimited (生成するCoreのサイズを制限しない)

プログラムを実行します。

./a.out
...
(省略)
...
Lambda:11   Em:1.01 ARI:0
Lambda:11   Em:1.02 ARI:0.290903
Segmentation fault (コアダンプ)

ここでカレントディレクトリを見ると、「core」と名のついたファイルが生成されているはずです。
このcoreをGDBでデバッグしてみます。

gdb ./a.out core

GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./a.out...done.
[New LWP 10366]
Core was generated by `./a.out'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00005599dc02eccb in Hcm::set_crispMembership (this=0x7ffcf0375ea0) at hcm.cxx:159
159     CrispMembership[max_index][k]=1.0;

ここで一番下にhcm.cxxのここがいけないよ
といったことが書いてあります。

もっと詳しく見てみたいのでbacktraceします。

(gdb) backtrace
#0  0x00005599dc02eccb in Hcm::set_crispMembership (this=0x7ffcf0375ea0) at hcm.cxx:159
#1  0x00005599dc03c300 in main () at qfcma_main_user_knowledge.cxx:112

main関数の原因箇所を詳しく見たいので#1を指定します。

(gdb)frame 1
warning: Source file is more recent than executable.
112       test.set_crispMembership();

これでどの関数が悪いのかが分かりました。
(さらに詳しい原因は現在調査中です...)

gdbについてのさらに詳しい記事

https://qiita.com/ShikiSumiya/items/a08363db88f21c81d351

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

私がデスクトップ環境として Budgie を愛用している理由

1. はじめに

 現在,Linux のデスクトップ環境は GNOMEKDE を筆頭に,GNOME から派生した MATECinnamon。また,独立系として XfcePantheon など,多種多様なものが存在しています。その中でも,筆者は Budgie を愛用しています。この記事は,筆者がこれまでに使用してきたデスクトップ環境と比較しながら,Budgie を愛用する理由を記述したものです。
 続く 2 章では,Budgie の概要について記述します。3 章では,Budgie の魅力について記述します。4 章では,Budgie の欠点について記述します。5 章では,本記事のまとめを記述します。

2. Budgie の概要

 Budgie は,Solus Project によって開発されているオープンソースのデスクトップ環境です。現在は,ツールキットとして GTK+3 を採用しており,GTK+4 への移行が公式で発表されています。

3. Budgie の魅力

 筆者が思う,Budgie の魅力を以下に示します。

 (1) シンプルでエレガントなデザイン

 (2) 必要十分な設定項目

 (3) カスタマイズ可能なパネル

 全体の印象としては,GNOME・Cinnamon・Pantheon の良い部分を抽出したようなデスクトップ環境です。

4. Budgie の欠点

 筆者が思う,Budgie の欠点を以下に示します。

 (1) 技術が枯れきっていない
 GNOME や KDE などに比べると,Budgie は新しいデスクトップ環境なので,少なからずバグが残っています。また,開発を行っている Solus Project は,小規模なチームです。そのため,枯れきるまでに時間がかかることが予想されます。

 (2) 拡張性が低い
 GNOME Shell Extensions や Cinnamon Spices のように,ユーザーが開発した Applet を配布・インストールする手段が無いので拡張性に劣る。

 ※ Budgie Applets という snap アプリを用いることで非公式の Applet をインストール出来るが,ユーザーが配布できる機能は無い

5. おわりに

 4 章で述べた通り,Budgie は完璧なデスクトップ環境ではありません。しかし,その欠点を帳消しにするほどの魅力があると筆者は感じています。また,今後のアップデートで,より良いデスクトップ環境になると思います。最後に,この記事が Budgie を知るきっかけになれば幸いです。

参照情報

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

source ~/.zshrc_historyは絶対に実行してはいけない(戒め

あるある

# ivm .zshrc
# dlssjksdklsdfkjlllklld

打ち損じたり、考え事をしていて不意に意味不明な文字をターミナルに叩いてしまう。
ついやってしまうが、上キーでコマンド履歴を漁る度にこいつらが出てくる。ううむ。

どうすりゃいいんだ...

みた感じ~/.zshrc_historyを直接編集して該当部分を消せばいいらしい。
vimで編集して保存する。

あれ?

反映されない。なんで?(殺意

じゃあ...

source ~/.zshrc_historyで反映っと...

# source ~/.zshrc_history

!?

# source ~/.zsh_history                                                                                                                 
/bin/zsh
root のログインシェルを変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
    ログインシェル [/bin/zsh]: n
chsh: 警告: n は存在しません
/root/.zsh_history:source:4: そのようなファイルやディレクトリはありません: ./.zshrc
/root/.zsh_history:source:5: そのようなファイルやディレクトリはありません: ./.vimrc
E: 不正な操作 ibus-anthy
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージはアップグレードされます:
  ibus-anthy
アップグレード: 1 個、新規インストール: 0 個、削除: 0 個、保留: 1514 個。
739 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 0 B のディスク容量が消費されます。
/usr/share/apt-listchanges/apt_listchanges.py:540: FutureWarning: Possible nested set at position 25
  email_re = re.compile(r'([a-zA-Z0-9_\+\-\.]+)@(([[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)')
changelog を読み込んでいます... 完了
^CE: 子プロセス /usr/sbin/dpkg-preconfigure --apt || true がシグナル 2 を受け取りました。
E: Failure running script /usr/sbin/dpkg-preconfigure --apt || true
/root/.zsh_history:cd:9: そのようなファイルやディレクトリはありません: etc/apt
Loading internal logger. Log::Log4perl recommended for better logging
Reading '/root/.cpan/Metadata'
^C^C

!??!!????!??!??!?!???!?!??!?!!??
次々と身に覚えのないコマンドが勝手に実行されます。恐怖です。祈るような気持ちでctrl-Cを連打します。

原因

よく考えなくても当然です。
sourceは.zsh_historyに記録されているコマンドを頭から読み込んでかたっぱしから実行しているのです。

# head .zsh_history                                                                                                                            
chsh -s /bin/zsh
echo $SHELL
chsh
source ./.zshrc
source ./.vimrc
vim 
apt ibus-anthy
apt install --fix-missing ibus-anthy
cd etc/apt
vim apt.conf.d

なんて恐ろしいんだ...

教訓

当時、齢15の少年だった僕はsourceコマンドを勝手に「設定を更新/反映してくれるコマンド」だと勘違いしていました。zshrcを更新するノリでうっかり実行してしまったのです。
僕みたいなうっかりが、もしかしたらいるかもしれないので教訓としてここに残しておきます。

_人人人人人人人人人人人人人人人人人人人人人人人人_
source ~/.zshrc_historyは絶対に実行してはいけない
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

(もしかしてLinuxあるあるじゃないのか...?)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む