https://sourceware.org/ml/libc-alpha/2017-02/msg00079.html

目玉は

- explicit_bzeroのサポート (OpenBSDからの輸入)
- getentropy と getrandom の追加(いままではsyscallを直接呼ぶしかなかった)
- malloc_get_state と malloc_set_state functions の削除(うわさのemacs専用関数です。つかうのはemacsビルド時だけなのでemacs開発者は./configureを再実行してね)
- GDBのpretty printでmutexとcondition variableがきれいに表示されるように(なんでglibcに関係するんだろう?)
- pthreadの condition variableのアルゴリズムが変更され、順序が強く保証されるように
- pthread_rwlockがよりスケーラブルに

最初の2つが一番影響大きそう





 

6年ぐらい前に、execle, execlp が man では async-signal-safe にリストされてるけど間違ってるよという
チケットを切ったんだけど、ずっと放置されてて

https://bugzilla.kernel.org/show_bug.cgi?id=25292 

6年後に対応してもらえましたよ。実装がなおったんだよね。
glibc 2.24 からexec系 syscall がまともになりました。

https://sourceware.org/bugzilla/show_bug.cgi?id=19534

みんな、Adhemerval Zanella に感謝しよう。

これ結構ひどくて、multi thread で forkした場合は以降は async-signal-safe しか呼んではいけないので
exec呼んだらデッドロックリスクがある(かつmanには書いてない)という、たいそう罠な仕様だったのさ。
アーメン

 

うちでは最低8GBないとまともに動かない感じだなあ。
 ここをセコくチューニングしても負荷があがったら途端に破綻するので、このまま行くべきかな


まあ、端的に言うとここに全部書いてあった。

 MySQLでToo many connectionsが出た時の対応 http://qiita.com/kenjiszk/items/c3d46ac837845281e62b

% mysql -u root -p  

mysql> show variables like "%max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.01 sec)

設定変えるときは /etc/my.cnf に

[mysqld]
max_connections        = 1000
と書けばいいっぽいが、Ubuntuだと設定ファイルの階層がちょっと違っていて
/etc/mysql/mysql.conf.d/max_connections.cnf みたいな新規ファイルを作り、
[mysqld]
max_connections        = 1000
と書くのがよい。

これで終わり・・・・・と思うだろ?

% mysql -u root -p  

mysql> show variables like "%max_connections%";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 214   |
+-----------------+-------+
1 row in set (0.01 sec)

なんだよ、214って。幸いなことに同じことにあたった人がいたのですぐに解決

MySQL Max_connections stuck on 214? https://codepoets.co.uk/2015/mysql-max_connections-stuck-on-214/

Increasing File Descriptors and Open Files Limit CentOS 7 https://naveensnayak.wordpress.com/2015/09/17/increasing-file-descriptors-and-open-files-limit-centos-7/


ようするに process の rlmit が低すぎるので上げてあげればよろしい。
/etc/security/limits.conf を設定するのは Ubuntu 16.04 では動かなくて(そして必要もなくて)

/lib/systemd/system/mysql.service

の [Service] セクションに
LimitNOFILE=65535
などと足してやればいい。

%
/lib/systemd/*/*.service は上書きしてはいけないらしいです。

systemdで既存のunitを編集する2つの方法 http://qiita.com/nvsofts/items/529e422bb8a326401c39

このへんのページ参照
%

sudo EDITOR=emacs systemctl edit mysql.service
とかして、設定ファイル編集画面を立ち上げて

[Service]
LimitNOFILE=65535
と書いて、セーブ&exit。

おわったら、

% systemctl restart mysql
して、また最初の設定値確認の方法で、ただしく動いていることを確認する。


追記 2016/12/13: はてぶに大層有益な情報がのってたので転載
tmtms: Ubuntu の systemd の設定で root じゃなくて mysql ユーザーで起動するようになってて mysqld 起動後に setrlimit で fd の上限をあげられないからかな。大昔に調べてた→ http://tmtms.hatenablog.com/entry/20090605/1244215294


↑このページのトップヘ