頭のいいヤツは、
わかりやすく話す。
頭の悪いヤツほど、
難しく話すんだよ。
|
|
Semakin di depan
頭のいいヤツは、
わかりやすく話す。
頭の悪いヤツほど、
難しく話すんだよ。
|
|
バカっていうのは
自分がハダカになることなんだよ。
世の中のいろんな常識を無視して、
純粋な自分だけのものの見方や
生き方を押し通すことなんだよ。
だから、バカだからこそ
語れる真実っていっぱいあるんだ。
|
よく忘れるので備忘録しておきます。
溜まった過去ログの古く不要なのを削除するのに使ってます。
[ コマンド例 ]
180日以上前のファイルを削除
find /parentdirectoryname/directoryname -mtime +180 -exec rm -f {} \;
詳しくはここに書いてくださってます : https://qiita.com/narumi_/items/9ea27362a1eb502e2dbc
Windows でディレクトリのサイズ合計を見せてくれるアプリがありますが、Linuxで同様のことがわかるシェルスクリプトを作ってます。
容量的に厳しくなってきたサーバーのファイル整理、無駄に溜まってる過去のログのチェックなどに使えると思います。
調べたいディレクトリをカレントにして、コマンドを実行。
shファイルのフルパスを指定する必要あるので、alias で設定しておけば便利と思います。
[ スクリプト ]
#!/bin/sh # # target directory file size summary list # tgt=`pwd` echo ${tgt} dirs=${tgt}/* # loop current directory # for filepath in ${dirs}; do # if filename belongs directory # if [ -d ${filepath} ]; then # if excluded dir, do nothing. if [ $# -eq 2 ] && [ $1 = "E" ] && [ $2 = ${filepath} ] ; then echo ${filepath}" ignored" else du -sh ${filepath} fi # if param count equals 1 and "C" # # print a file count # if [ $# -eq 1 ]; then if [ $1 = "C" ]; then find ${filepath} | wc -l echo "---------------------------------" fi fi fi done
[ 利用例 ]
引数なし
[root@???? opt]# /scriptdir/scriptname.sh /opt 30M /opt/firebird 190M /opt/google 382M /opt/openoffice4 700M /opt/saw17 392M /opt/sqlanywhere16
$1 : C
ファイル数も出力
[root@???? opt]# scriptdir/scriptname.sh C /opt 30M /opt/firebird 256 --------------------------------- 190M /opt/google 101 --------------------------------- 382M /opt/openoffice4 4275 --------------------------------- 700M /opt/saw17 1913 --------------------------------- 392M /opt/sqlanywhere16 2810 ---------------------------------
$1 : E
$2 : 対象からはずすディレクトリ
[root@???? opt]# /scriptdir/scriptname.sh E /opt/google /opt 30M /opt/firebird /opt/google ignored 382M /opt/openoffice4 700M /opt/saw17 392M /opt/sqlanywhere16
|
mysql のコマンドで、テーブルの定義や細かいステータスは見れますが、ふと収容先の全データベースのサイズを見る必要があったので、自作してます。
名前は、コマンド用なので短くして、引数なしにしてます。
[ DDL ]
CREATE DEFINER=`root`@`localhost` PROCEDURE `dbsize`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '簡単データベースサイズ'
BEGIN
SELECT
table_schema,
sum(data_length) /1024/1024 + sum(index_length) /1024/1024 AS total_mb,
sum(data_length) /1024/1024 AS data_mb,
sum(index_length) /1024/1024 AS index_mb
FROM
information_schema.tables
GROUP BY
table_schema
ORDER BY
sum(data_length + index_length) DESC;
END
[ 利用例 ]
mysql> call dbsize; +--------------------+---------------+---------------+---------------+ | table_schema | total_mb | data_mb | index_mb | +--------------------+---------------+---------------+---------------+ | ?????????? | 4028.40940857 | 2589.96604919 | 1438.44335938 | | ?????????? | 3389.75976753 | 2149.07226753 | 1240.68750000 | | ?????????? | 1720.67187500 | 812.59375000 | 908.07812500 | | mysql | 11.26994324 | 10.99552917 | 0.27441406 | | ?????? | 3.45312500 | 2.07812500 | 1.37500000 | | information_schema | 0.15625000 | 0.15625000 | 0.00000000 | | sys | 0.01562500 | 0.01562500 | 0.00000000 | | performance_schema | 0.00000000 | 0.00000000 | 0.00000000 | +--------------------+---------------+---------------+---------------+ 19 rows in set (0.27 sec) Query OK, 0 rows affected (0.27 sec)
管理人のわかりにくいコードよりも、以下に説明されているのが、一番シンプルでわかりやすいかと思い、リンクを貼っておきます。
Qiitaのリンク : https://qiita.com/ohke/items/bec00a69d3f538aab06b
[ 説明・感想 ]
|
本番環境では普通に JNDI のプーリングが効いて、接続数過多のエラーはまずは発生しないですが、NetBeansの開発環境で JNDI が使えないので (管理人が知らないだけなのかも)、MyBatis の設定は、MyBatis のPOOL を使ってます。
<environment id="?????">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${msdriver}"/>
<property name="url" value="${msurl}"/>
<property name="username" value="${msusername}"/>
<property name="password" value="${mspassword}"/>
<!-- maybe not affect -->
<property name="poolMaximumActiveConnections" value="1000" />
<property name="poolMaximumIdleConnections" value="1000" />
<!--<property name="maxActive" value="300" />-->
<!--<property name="maxWait" value="5000" />-->
</dataSource>
</environment>
正常にプーリングが効くはずなんですが、よく MySQL の JDBC が Too many connections でエラーを起こします。
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1014)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1110)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2465)
at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2306)
... 55 more
MySQL の my.ini (Windowsなので) の最大 300 にしていたのを、試しに 1000 に変更して、エラーの発生する処理 (連続1200レコードほどの INSERT) を行ったところ、
何故か、エラーなしに正常に処理が完了出来ました。
# The maximum amount of concurrent sessions the MySQL server will # allow. One of these connections will be reserved for a user with # SUPER privileges to allow the administrator to login even if the # connection limit has been reached. max_connections=1000
処理中、プロセス数を確認してみると、500位まで接続数が上昇し続け、アイドルなのが捨てられ、1桁に減りました。
MyBatis の問題か、connecter/J の問題かはわかりませんが、長年の??が解消しました。
接続セッション一覧 : show processlist;
mysql> show processlist; +-------+-----------------+-----------------+----------+---------+------+-----------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+-----------------+-----------------+----------+---------+------+-----------------------------+------------------+ | 1 | event_scheduler | localhost | NULL | Daemon | 9 | Waiting for next activation | NULL | | 67692 | root | localhost | ????? | Query | 0 | starting | show processlist | | 68108 | root | 127.0.0.1:43480 | ????? | Sleep | 21 | | NULL | | 68224 | root | 127.0.0.1:43712 | ???????? | Sleep | 29 | | NULL | | 68408 | root | 127.0.0.1:45742 | ???????? | Sleep | 24 | | NULL | +-------+-----------------+-----------------+----------+---------+------+-----------------------------+------------------+ 5 rows in set (0.00 sec)
接続セッション数 : show status like ‘Threads_connected’; または SELECT COUNT(*) FROM information_schema.PROCESSLIST;
mysql> show status like 'Threads_connected'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_connected | 4 | +-------------------+-------+ 1 row in set (0.01 sec)
mysql> SELECT count(*) FROM information_schema.PROCESSLIST; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec)
最大接続設定 : show global variables like ‘max_connections’;
mysql> show global variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | ??? | +-----------------+-------+ 1 row in set (0.00 sec)
現実は痛切である。
あらゆる甘さが排斥される。
現実は予想できぬ豹変をする。
あらゆる平衡は早晩打破せられる。
現実は複雑である。
あらゆる早合点は禁物である。
|
人間というやつは、どんな異常な体験をしたところで、時間さえ経てば忘れてしまう
|
コメントを投稿するにはログインしてください。