Hatena::ブログ(Diary)

ablog このページをアンテナに追加 RSSフィード

2017-09-23

AWRレポートを CSV に変換する手順

AWRレポートを CSV に変換する手順。CSVEXCEL のピボットグラフなどを使って分析すると便利です。


$ git clone https://github.com/yasushiyy/awr2csv.git
$ cd awrrep
  • AWRレポートを CSV に変換する。
$ python ../awrhtml2csv.py *.html
  • 変換後のファイルを確認する。
$ ls -1 *.csv
events_background.csv
events_foreground.csv
events_topn.csv
inst_efficiency.csv
load_profile.csv
parameters.csv
seg_logical.csv
seg_phys_reads.csv
seg_phys_writes.csv
seg_unoptimized.csv
sql_cpu.csv
sql_elapsed.csv
sql_executions.csv
sql_gets.csv
sql_parses.csv
sql_reads.csv
sql_unoptimized.csv
sql_user_io.csv
sql_version.csv
time_model.csv

前提

  • NLS_LANG は American_America.<CHARACTERSET> で AWR レポートを出力する。

Tips

NLS_LANG が American_America... で出力されておらずAWRレポートの日付が "31-9月 -15" のようになっていて以下のエラーになる場合は、

$ python ../../awrhtml2csv.py *.html 
Processing awrrpt_1_41050_41051.html...
Traceback (most recent call last):
  File "../../awrhtml2csv.py", line 135, in <module>
    output = parse(filelist)
  File "../../awrhtml2csv.py", line 97, in parse
    st = datetime.strptime(snap.text, '%d-%b-%y %H:%M:%S')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u6708' in position 4: ordinal not in range(128)

月を英字に変換する。

$ perl -i.org -pe 's/8 /Aug/g;s/9 /Sep/g' *.html

参考


追記(2017/09/29):

$ python ../../awrhtml2csv.py *.html

xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 9192, column 13

とエラーになったので、調べたら、AWRレポートの末尾に「9317行が選択されました。」と入ってるのが原因だった。

End of Report
</body></html>

9317行が選択されました。

Perl ワンライナーで除去したらエラーが出なくなった。

$ perl -i.org -pe 's/.*行が選択されました。//g' *.html

2017-09-16

Mac で右クリックで新規ファイル作成する by New File Creation

New File CreationMac で右クリック(2本指でタップ)で新規ファイル作成する方法をメモ。


インストール


設定

  • [システム環境設定]-[機能拡張]-[Finder]で[New File Creation Extension]にチェックを入れる。

f:id:yohei-a:20170917001747p:image:w640


使ってみる

  • 2本指でタップして、[New File Creation...] を選択する。

f:id:yohei-a:20170917002952p:image:w360

  • ファイルタイプを選んで、ファイル名を入力して [Save] で保存する。

f:id:yohei-a:20170917002946p:image


環境


参考

2017-09-15

MySQL で NOT NULL 制約のある列に複数行インサートするとその型のデフォルト値が入る

MySQLSQL モードが STRICT モードでない場合、NOT NULL 制約のある列に複数行インサートするとその型のデフォルト値(0とか空文字)が入る(1行インサートだとエラーで入らない)。


検証結果

  • Amazon Aurora with MySQL Compatibility に接続する
$ mysql -h ******.******.ap-northeast-1.rds.amazonaws.com -u awsuser -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 53
Server version: 5.6.10 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use mydb;
Database changed
mysql> create table `not_null_test` (
    ->   `id` int(10) unsigned not null,
    ->   `int_col` int(10) unsigned not null,
    ->   `char_col` char(10)  not null,
    ->   `ts_col` timestamp not null,
    ->   primary key (`id`)
    -> ) engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.05 sec)
  • SQL モードは設定されていない
mysql> select @@global.sql_mode;
+-------------------+
| @@global.sql_mode |
+-------------------+
|                   |
+-------------------+
1 row in set (0.02 sec)
  • 1行インサートはエラーになる
mysql> insert into not_null_test (id, int_col, char_col, ts_col) values (1, null, null, null);
ERROR 1048 (23000): Column 'int_col' cannot be null
  • 複数行インサートは成功する
mysql> insert into not_null_test (id, int_col, char_col, ts_col) values (1, null, null, null), (2, null, null, null);
Query OK, 2 rows affected, 4 warnings (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 4
mysql> select * from not_null_test;
+----+---------+----------+---------------------+
| id | int_col | char_col | ts_col              |
+----+---------+----------+---------------------+
|  1 |       0 |          | 2017-09-15 06:54:07 |
|  2 |       0 |          | 2017-09-15 06:54:07 |
+----+---------+----------+---------------------+
2 rows in set (0.02 sec)
  • SQLモードを STRICT_ALL_TABLES にする
mysql> set sql_mode='strict_all_tables';
Query OK, 0 rows affected (0.03 sec)
  • 1行インサートは失敗する
mysql> insert into not_null_test (id, int_col, char_col, ts_col) values (1, null, null, null);
ERROR 1048 (23000): Column 'int_col' cannot be null
  • 複数行インサートも失敗する
mysql> insert into not_null_test (id, int_col, char_col, ts_col) values (1, null, null, null), (2, null, null, null);
ERROR 1048 (23000): Column 'int_col' cannot be nul

参考

単列インサートの場合はNOT NULLが指定されたカラムにNULL値が挿入されるとそのクエリはエラーとなって失敗するが、複数列インサートの場合は警告(warning)を発するものの、クエリは正常に受け付けられる。

その際、NULL値が指定された各カラムにはそれぞれのカラムのデータ型の暗黙的なデフォルト値が挿入される。(数値型なら0、文字列型なら空文字''、etc…)

MySQLにおけるNOT NULLカラムへのインサート時の挙動 - Sojiro’s Blog

NOT NULL として宣言されているカラムへの NULL の挿入。複数行の INSERT ステートメントまたは INSERT INTO ... SELECT ステートメントの場合、このカラムは、そのカラムデータ型の暗黙のデフォルト値に設定されます。これは、数値型では 0、文字列型では空の文字列 ('')、および日付と時間型では「0」の値です。サーバーは SELECT からの結果セットを検査して、それが単一行を返すかどうかを確認しないため、INSERT INTO ... SELECT ステートメントは複数行の挿入と同じ方法で処理されます。(単一行の INSERT の場合は、NULL が NOT NULL カラムに挿入されても警告は発生しません。代わりに、このステートメントがエラーで失敗します。)

MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.5 INSERT 構文

明示的な DEFAULT 句のない NOT NULL カラムに対するデータエントリでは、INSERT または REPLACE ステートメントにカラムの値を含まれていない場合、または UPDATE ステートメントがカラムを NULL に設定する場合、MySQL はその時点で有効な SQL モードに従ってカラムを処理します。

(中略)

セクション5.1.7「サーバー SQL モード」を参照してください。

所定のテーブルに対して、SHOW CREATE TABLE ステートメントを使用すると、どのカラムに明示的な DEFAULT 句があるかを確認できます。

暗黙的なデフォルトは次のように定義されます。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.6 データ型デフォルト値

厳密モードは、MySQL が INSERT や UPDATE などのデータ変更ステートメントで無効な値または欠落した値を処理する方法を制御します。値はいくつかの理由で無効になることがあります。たとえば、カラムに対して正しくないデータ型を持っていたり、範囲外であったりすることがあります。値の欠落が発生するのは、挿入される新しい行の非 NULL カラムに値が含まれておらず、そのカラムに明示的な DEFAULT 句が定義されていない場合です。(NULL カラムの場合、値が欠落しているときは NULL が挿入されます。)

厳密モードが有効でない場合、MySQL は無効または欠落した値に対して調整された値を挿入し、警告を生成します (セクション13.7.5.41「SHOW WARNINGS 構文」を参照してください)。厳密モードでは、INSERT IGNORE または UPDATE IGNORE を使用すると、この動作を実行できます。

データを変更しない SELECT などのステートメントの場合、厳密モードでは無効な値はエラーでなく警告を生成します。

厳密モードは、外部キー制約が検査されるかどうかに影響されません。foreign_key_checks を検査に使用できます。(セクション5.1.4「サーバーシステム変数」を参照してください。)

MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.7 サーバー SQL モード

2017-08-11

Amazon Redshift からテーブル作成DDLを自動生成する

Amazon Redshift 自体にはクラスターに存在するテーブルなどのオブジェクトのDDLを生成する機能はないが、以下のスクリプトやツールで生成することができる。

つまり、Oracle Database の DataPump の CONTENT=METADATA_ONLYexp の rows=n ような機能はないが、DBMS_METADATA.GET_DDL 相当のことができるスクリプトやツールは存在する。

以下のツールでDDL文を生成できる*1


具体的な手順例は以下の通り。

SQL Workbench/J を使う

f:id:yohei-a:20170812000948p:image:w640

f:id:yohei-a:20170812000944p:image:w360 f:id:yohei-a:20170812000937p:image:w640

25. SQL Workbench/J to generate DDL commands を見るとコマンドラインからでも同じことができそう。


Amazon Redshift Utilities のスクリプトを使う方法

$ git clone https://github.com/awslabs/amazon-redshift-utils.git
$ cd amazon-redshift-utils/src/AdminViews
  • Redshift クラスターに接続する
$ psql "host=******.******.ap-northeast-1.redshift.amazonaws.com user=master dbname=mydb port=5439"
Password:
psql (9.6.2, server 8.0.2)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: on)
Type "help" for help.
mydb=#
  • admin スキーマを作成する。
mydb=# CREATE SCHEMA admin;
CREATE SCHEMA
  • v_generate_tbl_ddl ビューを作成する。
mydb=# \i ./v_generate_tbl_ddl.sql
CREATE VIEW
  • pager を OFF にする。
mydb=# \pset pager
Pager usage is off.
  • DDL を生成する(pg_catalog スキーマの全てのテーブル)。
mydb=# select * from admin.v_generate_tbl_ddl where schemaname='pg_catalog' limit 30;
 schemaname |      tablename      |    seq    |                              ddl
------------+---------------------+-----------+---------------------------------------------------------------
 pg_catalog | padb_config_harvest |         0 | --DROP TABLE "pg_catalog"."padb_config_harvest";
 pg_catalog | padb_config_harvest |         2 | CREATE TABLE IF NOT EXISTS "pg_catalog"."padb_config_harvest"
 pg_catalog | padb_config_harvest |         5 | (
 pg_catalog | padb_config_harvest | 100000001 |         "name" CHAR(136) NOT NULL  ENCODE lzo
 pg_catalog | padb_config_harvest | 100000002 |         ,"harvest" INTEGER NOT NULL  ENCODE lzo
 pg_catalog | padb_config_harvest | 100000003 |         ,"archive" INTEGER NOT NULL  ENCODE lzo
 pg_catalog | padb_config_harvest | 100000004 |         ,"directory" CHAR(500) NOT NULL  ENCODE lzo
 pg_catalog | padb_config_harvest | 299999999 | )
 pg_catalog | padb_config_harvest | 300000001 | DISTSTYLE EVEN
 pg_catalog | padb_config_harvest | 600000000 | ;
 pg_catalog | pg_aggregate        |         0 | --DROP TABLE "pg_catalog"."pg_aggregate";
 pg_catalog | pg_aggregate        |         2 | CREATE TABLE IF NOT EXISTS "pg_catalog"."pg_aggregate"
 pg_catalog | pg_aggregate        |         5 | (
 pg_catalog | pg_aggregate        | 100000001 |         "aggfnoid" REGPROC NOT NULL
 pg_catalog | pg_aggregate        | 100000002 |         ,"aggtransfn" REGPROC NOT NULL
 pg_catalog | pg_aggregate        | 100000003 |         ,"aggfinalfn" REGPROC NOT NULL
 pg_catalog | pg_aggregate        | 100000004 |         ,"aggtranstype" OID NOT NULL
 pg_catalog | pg_aggregate        | 100000005 |         ,"agginitval" TEXT
 pg_catalog | pg_aggregate        | 299999999 | )
 pg_catalog | pg_aggregate        | 300000001 | DISTSTYLE EVEN
 pg_catalog | pg_aggregate        | 600000000 | ;
 pg_catalog | pg_am               |         0 | --DROP TABLE "pg_catalog"."pg_am";
 pg_catalog | pg_am               |         2 | CREATE TABLE IF NOT EXISTS "pg_catalog"."pg_am"
 pg_catalog | pg_am               |         5 | (
 pg_catalog | pg_am               | 100000001 |         "amname" NAME NOT NULL
 pg_catalog | pg_am               | 100000002 |         ,"amowner" INTEGER NOT NULL
 pg_catalog | pg_am               | 100000003 |         ,"amstrategies" SMALLINT NOT NULL
 pg_catalog | pg_am               | 100000004 |         ,"amsupport" SMALLINT NOT NULL
 pg_catalog | pg_am               | 100000005 |         ,"amorderstrategy" SMALLINT NOT NULL
 pg_catalog | pg_am               | 100000006 |         ,"amcanunique" BOOLEAN NOT NULL
(30 rows)
  • 出力先ファイル名を設定する。
mydb=# \o ddl.sql
  • DDL のみ生成する。
mydb=# select ddl from admin.v_generate_tbl_ddl where schemaname='pg_catalog';
  • 切断する。
mydb=# \q
  • 出力ファイルを確認する。
$ head -10 ddl.sql 
                                         ddl
--------------------------------------------------------------------------------------
 --DROP TABLE "pg_catalog"."padb_config_harvest";
 CREATE TABLE IF NOT EXISTS "pg_catalog"."padb_config_harvest"
 (
         "name" CHAR(136) NOT NULL  ENCODE lzo
         ,"harvest" INTEGER NOT NULL  ENCODE lzo
         ,"archive" INTEGER NOT NULL  ENCODE lzo
         ,"directory" CHAR(500) NOT NULL  ENCODE lzo
 )
$ tail -10 ddl.sql
 CREATE TABLE IF NOT EXISTS "pg_catalog"."systable_topology"
 (
         "hash" INTEGER NOT NULL  ENCODE lzo
         ,"slice" INTEGER NOT NULL  ENCODE lzo
         ,"mirror" INTEGER NOT NULL  ENCODE lzo
 )
 DISTSTYLE EVEN
 ;
(4815 rows)

Aginity Workbench for Amazon Redshift


参考

macOS Sierra でアプリケーションを起動しようとすると "開発元が未確認のため開けません"と怒られる

事象

ダウンロードしたアプリケーションを開こうとすると"開発元が未確認のため開けません"と怒られる。


解決策

  • [Control]キーを押しながら対象のアプリケーションをクリックする
  • ショートカットメニューから [開く] を選択する

参考

SQL Workbench/J で Amazon Redshift に接続する

SQL Workbench/J をインストールして Amazon Redshift に接続するまでの手順をメモ。SQL Workbench/J は Java で書かれた GUI および CUI から SQL を実行できるツールで、様々な RDBMS に使える。

SQL Workbench/J is a free, DBMS-independent, cross-platform SQL query tool. It is written in Java and should run on any operating system that provides a Java Runtime Environment.

Its main focus is on running SQL scripts (either interactively or as a batch) and export/import features. Graphical query building or more advanced DBA tasks are not the focus and are not planned

SQL Workbench/J -  Home

環境


インストール

SQL Workbench/J
  • SQL Workbench/J -  Downloads から [Download package for MacOS] をクリックしてダウンロードする。
  • Workbench-Build122-Mac.tgz をダブルクリックして解凍する。
  • SQLWorkbenchJ を[アプリケーション]フォルダに移動する。
Amazon Redshift JDBC Driver

設定

  • アプリケーションフォルダで SQLWorkbenchJ を開く。
  • [Select Connection Profile] で [Manager Drivers] を選択する。
  • 新しくドライバーの設定を以下の通り追加して [OK] をクリックする。
    • Name: Redshift (任意の名前を設定する)
    • Library: フォルダアイコンをクリックして RedshiftJDBC42-1.2.1.1001.jar を選択する。

Redshift クラスターに接続する

  • [Select Connection Profile] で以下の通り設定し、[OK]をクリックする。
    • Driver: Redshift(↑で設定した名前)を選択する
    • URL: jdbc:redshift://エンドポイント:ポート/データベース
      • 例) jdbc:redshift://***.***.ap-northeast-1.redshift.amazonaws.com:5439/mydb
      • AWSマネジメントコンソールで接続したいクラスターの[設定]タブ-[データベースのプロパティ]-[JDBC URL] を指定する。
    • Username: クラスター作成時に設定したユーザー名を指定する
    • Password: クラスター作成時に設定したパスワードを指定する

使ってみる

  • [Tools]-[ShowDbTree] を選択する。
  • 表などを選択して、右クリックして[Put Select Into]-[StatementN] を選択する。
  • SQL選択して、実行ボタンをクリックする。

f:id:yohei-a:20170811175736p:image


補足

SQL Workbench/J can also be used from the command line without starting the GUI, e.g. when you only have a console window (Putty, SSH) to access the database. In that case you can either run scripts using the batch mode, or start SQL Workbench/J in console mode, where you can run statements interactively, similar to the GUI mode (but of course with less comfortable editing possibilities).

19. Using SQL Workbench/J in console mode
  • SQL Workbench/J は Java アプリケーションでコマンドラインでも実行できるので、どこに jar があるか調べてみた。
$ sudo find / -type f -name sqlworkbench.jar
/Applications/SQLWorkbenchJ.app/Contents/Java/sqlworkbench.jar

参考

*1:以下は一例で他にもある

2017-07-30

macOS の標準パフォーマンス分析ツール

macOS の標準*1パフォーマンス分析ツールを Brendan Gregg のスライドでざっと調べてみた。


環境


ツール

Activity Monitor.app
  • [ウインドウ]-[アクティビティモニタ]、[CPU使用率]、[CPUの履歴]でウインドウの表示/非表示を切替える。

f:id:yohei-a:20170730172136p:image

  • アクティビティモニタでプロセスを選択して、[表示]-[プロセスの詳細を表示]

f:id:yohei-a:20170730173148p:image

  • アクティビティモニタでプロセスを選択して、[表示]-[プロセスのサンプルを収集]

f:id:yohei-a:20170730233523p:image

f:id:yohei-a:20170730233513p:image

uptime
$ uptime
17:38  up 1 day,  7:05, 1 user, load averages: 1.79 2.10 2.56
top
$ top -o cpu
Processes: 303 total, 2 running, 301 sleeping, 1697 threads                                                                                                                                         17:40:05
Load Avg: 2.40, 2.20, 2.54  CPU usage: 15.85% user, 7.31% sys, 76.82% idle  SharedLibs: 149M resident, 42M data, 74M linkedit. MemRegions: 59858 total, 6021M resident, 151M private, 3008M shared.
PhysMem: 16G used (2306M wired), 226M unused. VM: 823G vsize, 627M framework vsize, 72657(0) swapins, 95531(0) swapouts. Networks: packets: 767009/623M in, 679460/181M out.
Disks: 782083/24G read, 382735/9943M written.

PID    COMMAND      %CPU TIME     #TH   #WQ  #PORTS MEM    PURG   CMPRS  PGRP  PPID  STATE    BOOSTS          %CPU_ME %CPU_OTHRS UID        FAULTS   COW    MSGSENT   MSGRECV   SYSBSD    SYSMACH
12555  Microsoft Ou 25.2 21:33.78 43    31   15148+ 1481M+ 290M   0B     12555 1     sleeping *0[4038]        0.64662 0.00000    1037328352 2268449+ 10594  3311268+  1257213+  22280995+ 7447771+
14181  Google Chrom 12.8 01:54.42 16    1    148    363M+  0B     0B     1919  1919  sleeping *0[1]           0.00000 0.00000    1037328352 283212+  1601   225873+   15276+    641869+   2287322+
1051   jamfAgent    12.0 02:55.65 4     3    64     6068K  0B     0B     1051  1     sleeping *0[1]           0.21362 0.00000    0          6670     218    55684+    31971+    603555+   150024+
0      kernel_task  7.0  17:12.96 129/4 0    2      1152M+ 0B     0B     0     0     running   0[0]           0.00000 0.00000    0          95289    0      54129734+ 51758498+ 0         0
13876  iTerm2       4.7  00:27.87 11    5    283    74M+   1464K  0B     13876 1     sleeping *0[1282+]       0.10389 0.06503    1037328352 554414+  1849   121834+   40506+    445150+   272151+
1919   Google Chrom 2.8  11:59.27 44    5    736    164M   4304K  2692K  1919  1     sleeping *0[6177]        0.00000 0.00000    1037328352 1716077  5037   4238431+  1292194+  16897037+ 23244409+
14511  top          2.3  00:00.47 1/1   0    20     3300K  0B     0B     14511 13879 running  *0[1]           0.00000 0.00000    0          5026+    115    209532+   104759+   11246+    128306+
161    mDNSResponde 2.2  03:16.65 6     4    99     3800K  0B     36K    161   1     sleeping *0[1]           0.00000 0.00000    65         6686     159    249506+   319874+   15091358+ 329850+
116    hidd         2.2  04:41.81 7     4    222    2700K  0B     0B     116   1     sleeping *0[1]           0.00000 0.00000    261        102387   181    5464519+  2985797+  8617680+  7987882+
99     securityd    2.0  02:02.02 7     3    224+   4908K  0B     48K    99    1     sleeping *0[1]           0.67463 0.00000    0          378333+  196    1580562+  97314+    5375325+  9439277+
vm_stat
$ vm_stat 1
Mach Virtual Memory Statistics: (page size of 4096 bytes)
    free   active   specul inactive throttle    wired  prgable   faults     copy    0fill reactive   purged file-backed anonymous cmprssed cmprssor  dcomprs   comprs  pageins  pageout  swapins swapouts
   81761  1941557     4845  1555659        0   584538   633902 77598904  2786572 36178726  1090282   800963      549601   2952460    99718    25665  1470331  2795334  5794930    18186    72657    95531
   81411  1949655     4845  1555659        0   576453   635641      967        0      243        0        0      549601   2960558    99718    25665        0        0        0        0        0        0
   81725  1942542     4845  1555659        0   583570   631950      186        0      140        0        0      549601   2953445    99718    25665        0        0        0        0        0        0
   81601  1949782     4845  1555659        0   576376   635619      177        0      176        0        0      549601   2960685    99718    25665        0        0        0        0        0        0
   81595  1949782     4847  1555659        0   576376   642064      156        0      155        0        0      549603   2960685    99718    25665        0        0        0        0        0        0
   81272  1949774     4847  1555659        0   576376   642064      133        0      133        0        0      549603   2960677    99718    25665        0        0        0        0        0        0
iostat
$ iostat 1
              disk0       cpu    load average
    KB/t  tps  MB/s  us sy id   1m   5m   15m
   30.40   10  0.31  17 10 74  3.28 2.89 2.76
    6.00    2  0.01  18  5 77  3.28 2.89 2.76
    0.00    0  0.00  17  5 78  3.28 2.89 2.76
    6.00    6  0.04  15  4 81  3.28 2.89 2.76
    0.00    0  0.00  17  5 78  3.28 2.89 2.76
    0.00    0  0.00  20  5 75  3.18 2.88 2.76
netstat
$ netstat  1
            input        (Total)           output
   packets  errs      bytes    packets  errs      bytes colls
        36     0      24346         32     0      10190     0
        12     0      11938         10     0       3592     0
        33     0      27327         28     0       9033     0
        22     0      11766         20     0       7109     0
        38     0      27328         27     0       8142     0
DTrace
$ man -kP cat dtrace
Tcl_CommandTraceInfo(3tcl), Tcl_TraceCommand(3tcl), Tcl_UntraceCommand(3tcl) - monitor renames and deletes of a command
bitesize.d(1m)           - analyse disk I/O size by process. Uses DTrace
cpuwalk.d(1m)            - Measure which CPUs a process runs on. Uses DTrace
creatbyproc.d(1m)        - snoop creat()s by process name. Uses DTrace
dappprof(1m)             - profile user and lib function usage. Uses DTrace
dapptrace(1m)            - trace user and library function usage. Uses DTrace
diskhits(1m)             - disk access by file offset. Uses DTrace
dispqlen.d(1m)           - dispatcher queue length by CPU. Uses DTrace
dtrace(1)                - generic front-end to the DTrace facility
dtruss(1m)               - process syscall details. Uses DTrace
errinfo(1m)              - print errno for syscall fails. Uses DTrace
execsnoop(1m)            - snoop new process execution. Uses DTrace
fddist(1m)               - file descriptor usage distributions. Uses DTrace
filebyproc.d(1m)         - snoop opens by process name. Uses DTrace
hotspot.d(1m)            - print disk event by location. Uses DTrace
httpdstat.d(1m)          - realtime httpd statistics. Uses DTrace
iofile.d(1m)             - I/O wait time by file and process. Uses DTrace
iofileb.d(1m)            - I/O bytes by file and process. Uses DTrace
iopattern(1m)            - print disk I/O pattern. Uses DTrace
iopending(1m)            - plot number of pending disk events. Uses DTrace
iosnoop(1m)              - snoop I/O events as they occur. Uses DTrace
iotop(1m)                - display top disk I/O events by process. Uses DTrace
kill.d(1m)               - snoop process signals as they occur. Uses DTrace
lastwords(1m)            - print syscalls before exit. Uses DTrace
loads.d(1m)              - print load averages. Uses DTrace
newproc.d(1m)            - snoop new processes. Uses DTrace
opensnoop(1m)            - snoop file opens as they occur. Uses DTrace
pathopens.d(1m)          - full pathnames opened ok count. Uses DTrace
perldtrace(1)            - Perl's support for DTrace
pidpersec.d(1m)          - print new PIDs per sec. Uses DTrace
plockstat(1)             - front-end to DTrace to print statistics about POSIX mutexes and read/write locks
priclass.d(1m)           - priority distribution by scheduling class. Uses DTrace
pridist.d(1m)            - process priority distribution. Uses DTrace
procsystime(1m)          - analyse system call times. Uses DTrace
runocc.d(1m)             - run queue occupancy by CPU. Uses DTrace
rwbypid.d(1m)            - read/write calls by PID. Uses DTrace
rwbytype.d(1m)           - read/write bytes by vnode type. Uses DTrace
rwsnoop(1m)              - snoop read/write events. Uses DTrace
sampleproc(1m)           - sample processes on the CPUs. Uses DTrace
seeksize.d(1m)           - print disk event seek report. Uses DTrace
setuids.d(1m)            - snoop setuid calls as they occur. Uses DTrace
sigdist.d(1m)            - signal distribution by process. Uses DTrace
syscallbypid.d(1m)       - syscalls by process ID. Uses DTrace
syscallbyproc.d(1m)      - syscalls by process name. Uses DTrace
syscallbysysc.d(1m)      - syscalls by syscall. Uses DTrace
topsyscall(1m)           - top syscalls by syscall name. Uses DTrace
topsysproc(1m)           - top syscalls by process name. Uses DTrace
weblatency.d(1m)         - website latency statistics. Uses DTrace
$ sudo cpuwalk.d
dtrace: system integrity protection is on, some features will not be available

Sampling... Hit Ctrl-C to end.
^C

...

     PID: 1919     CMD: Google Chrome

           value  ------------- Distribution ------------- count
             < 0 |                                         0
               0 |@@@@@@@@@@@@@@                           10
               1 |@@@@@@                                   4
               2 |@@@@@@@@@@@@@@@@@@@                      14
               3 |@                                        1
               4 |                                         0

     PID: 172      CMD: coreaudiod

           value  ------------- Distribution ------------- count
             < 0 |                                         0
               0 |@@@@@@@@@                                18
               1 |@@@@@@@@@                                17
               2 |@@@@@@@@@@@@@                            25
               3 |@@@@@@@@                                 16
               4 |                                         0

     PID: 12555    CMD: Microsoft Outloo

           value  ------------- Distribution ------------- count
             < 0 |                                         0
               0 |@@@@@@@@@@@@@@@@                         125
               1 |@@@@@                                    37
               2 |@@@@@@@@@@@@@@@                          119
               3 |@@@@@                                    41
               4 |                                         0
Instruments
  • GUI で裏で DTrace などを使っているらしい。

f:id:yohei-a:20170730235028p:image


参考


関連

*1macOSに同梱されていてインストールしなくても使えるツール