動かざることバグの如し

近づきたいよ 君の理想に

MySQLの「Sending data」はクライアントへのデータ転送である

MySQLでshow processlistを眺めていたときに「Sending Data」に結構時間を取られていたので調べると以下の記事が出てきた。

tsurugeek.hatenablog.jp

「データの読み込みとフィルタリング」ということだ。
「Sending data」はクライアントへのデータ転送ではなかった。

って言ってるけどMySQLの公式ドキュメントには

Sending data スレッドは SELECT ステートメント行を読み取り、処理して、データをクライアントに送信しています。 この状態で行われる操作は、大量のディスクアクセス (読み取り) を実行する傾向があるため、
特定のクエリーの存続期間にわたる最長時間実行状態になることがあります。

データをクライアントに送信も含まれてるやんけ

結論

MySQLの「Sending Data」は、データの読み込み+フィルタリング+クライアントへのデータ送信のトータルを指す。ややこしいな

蛇足

が、MySQL 5.7の公式ドキュメントを見ると、なんと「Sending to client」という項目が新たにある

https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.htmldev.mysql.com

Sending to client
The server is writing a packet to the client. This state is called Writing to net prior to MySQL 5.7.8.

ん?これ間違ってなければ「MySQL 5.7.8より前のバージョンで呼ばれる」って意味だよね?じゃあ「Sending Data」との違いは何なんだ

UbuntuでPHP7+Mecabのインストール

環境

流れとしてはphpインストール、mecabインストール、php-mecabのインストール、設定

PHPのインストール

恒例、レポジトリの追加

add-apt-repository ppa:ondrej/php
apt-get update

php-fpmのインストール。php-7.0-devをインストールしているのは後述するMecabのモジュールのビルドに必要なため。

apt install php7.0-fpm php-7.0-dev

nginxの設定を書き換えてPHPが動くようにする。デフォルトなら/etc/nginx/sites-available/default

location ~ .php$ {
  fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  fastcgi_index index.php;
  include /etc/nginx/fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Mecabのインストール

省略

thr3a.hatenablog.com

コマンド上でecho おはよう| mecabが正しく動作できていれば大丈夫

php-mecab

適当なディレクトリ上で

git clone https://github.com/rsky/php-mecab.git

ビルド

cd php-mecab/mecab/
phpize
./configure
make
make install

/etc/php/7.0/mods-available/mecab.iniを作成して以下を記述

extension=mecab.so

phpコマンド単体でMecabが使えるようにさっきのファイルにシンボリックリンクを貼る

ln -s /etc/php/7.0/mods-available/mecab.ini /etc/php/7.0/cli/conf.d/20-mecab.ini

これでコマンド上のPHPからMecabが使えるようになったはず

root@vagrant:~# php -r "print_r(\MeCab\split('すもももももももものうち'));"
Array
(
    [0] => すもも
    [1] => も
    [2] => もも
    [3] => も
    [4] => もも
    [5] => の
    [6] => うち
)

今度はphp-fpmでも使えるように同様のシンボリックリンクを貼る

ln -s /etc/php/7.0/mods-available/mecab.ini /etc/php/7.0/fpm/conf.d/20-mecab.ini

再起動

service php7.0-fpm restart

適当なphpファイルで以下を試す

<?php
$str = "すもももももももものうち";

$mecab = new \MeCab\Tagger();
$nodes = $mecab->parseToNode($str);
var_dump($nodes);

UbuntuでCPUのパワーを抑えて節電対策

環境

インストール

apt install cpufrequtils

確認

cpufreq-infoコマンドを使う

# cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 0.97 ms.
  hardware limits: 1.60 GHz - 3.40 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 1.60 GHz and 3.40 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 2.55 GHz (asserted by call to hardware).

(↑がCPUの数だけ表示される)

ズラズラ表示されるが、主に抑えるポイントは以下

  • 最小周波数は1.60 GHz
  • 最大周波数は3.40 GHz
  • 現在のガバナーはpowersave
  • 利用可能なガバナーはperformance, powersave

シンプルに表示したければ以下

cpufreq-info -p
  1600000 3400000 powersave

ガバナーを設定

cpufreq-set -g powersave

CentOSでパフォーマンス出ないときはcpuspeedを疑え

要約

  • cpuspeedがCPUのパワーを勝手にセーブしている
  • 節電と温度のためにあるっぽいけど無効化しよう

経緯

とあるサーバーがスペックいいはずなのに、思ったよりスピードが出ない。

topコマンドとかログ見ても異常はとくにないし、、と思ったらどうやらcpuspeedというやつが勝手にCPUを抑制していた。

# cat /proc/cpuinfo|grep MHz
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1201.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1201.000
cpu MHz: 1201.000
cpu MHz: 1801.000
cpu MHz: 1201.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1201.000
cpu MHz: 1801.000

この時めっちゃ負荷かけてるのだから、本来はコア全部1800Mhz(1.8Ghz)になるはず。

cpuspeedの無効化

/etc/init.d/cpuspeed stop

再起動後もサービスが開始しないようにする

chkconfig cpuspeed off

無効化したあと

# cat /proc/cpuinfo|grep MHz
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000
cpu MHz: 1801.000

やったぜ。これでもう少し様子見 てかデフォルトで動くのやめてくれよ

トランセンドのUSBフラッシュメモリ JetFlash 790が期待を裏切る速度だった件

いや良い意味でね(

目的

GPD Pocketのリカバリ用にUSB3.0フラッシュメモリを探していたが、容量が容量なのである一定の速度が出てくれないと困る。

今回はコスパを重視したのでトランセンドJetFlash®790を買ってみた。

ちなみにAmazonで投げ売りされている某○芝のやつはUSB2.0の速度にすら劣るらしい。。

jp.transcend-info.com

お値段

楽天で税込み1980だった

item.rakuten.co.jp

外見

f:id:thr3a:20171023223104j:plain

至ってフツー。キャップ式ではなくスライドバータイプなのでキャップを無くす心配がない。接続も固いとかそういのうのはなくてスムーズだった

速度

王道のCrystalDiskInfoベンチマーク

合計3本買ったので3つとも測ってみた

f:id:thr3a:20171023235522p:plain

f:id:thr3a:20171023235527p:plain

f:id:thr3a:20171023235525p:plain

おおよそ読み込み130MB/s 書き込み40MB/s出ている。一般的なUSB3.0対応()を謳っているフラッシュメモリよりかは断然速い。

実速度

ベンチマークもいいけど実際にファイルをコピペしても書き込み40MB/s出てた 大量の画像をいっきにやると6MB/s程度に落ちるが

1980円でこの速度なら正直買いだと思う 

ちなみに

もっと金積んでSandiskのエクストリームプロシリーズならここまで速度出る

f:id:thr3a:20171024000431p:plain