dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

pythonでとりあえず例外をキャッチしておく方法

2018-09-22 15:24:19 | python
pythonで例外をさらっと処理する方法のメモ。

とりあえず、例外が発生したときに stderr に例外情報を出力できます。
try:
    ...
except:
    sys.stderr.write("exception: %s\n" % (sys.exc_info())


例外発生時は、以下のような情報が出力されます。
exception: (<class 'urllib.error.HTTPError'>, <HTTPError 400: ''>, <traceback object at 0x7ffb0f04bcc8>)


mysqlでスレッドの情報をみる方法

2018-09-15 19:32:16 | mysql
mysql で実行中のスレッドの情報をみる方法のメモ。

top で mysql の特定のスレッドの CPU 使用率が高い場合に、
そのスレッドが何を実行しているかを調べる場合には、以下の様にします。
mysql> select * from performance_schema.threads where THREAD_OS_ID={OSのスレッドID}\G

*************************** 1. row ***************************
          THREAD_ID: 1293224
               NAME: thread/sql/one_connection
               TYPE: FOREGROUND
     PROCESSLIST_ID: 1293191
   PROCESSLIST_USER: {ユーザ名}
   PROCESSLIST_HOST: {ホスト名}
     PROCESSLIST_DB: {DB名}
PROCESSLIST_COMMAND: Query
   PROCESSLIST_TIME: 0
  PROCESSLIST_STATE: starting
   PROCESSLIST_INFO: INSERT INTO ... 
   PARENT_THREAD_ID: NULL
               ROLE: NULL
       INSTRUMENTED: YES
            HISTORY: YES
    CONNECTION_TYPE: SSL/TLS
       THREAD_OS_ID: {OSのスレッドID}
1 row in set (0.01 sec)


PROCESSLIST_INFO に実行中のSQL文が表示されます。

topでスレッドを表示する方法

2018-09-15 19:23:53 | linux
topでスレッドを表示する方法のメモ。

topを実行中に H を押すと、実行中のスレッドが表示されます。

また、topを実行中に 1 を押すと、CPU 毎の情報が表示されますので、
特定のCPUの使用率が高い場合には、「topでプロセスを実行しているCPUを見る方法」も
あわせて実行すると、どのスレッドが CPU をよく使っているかがわかります。

topでプロセスを実行しているCPUをみる方法

2018-09-15 19:14:23 | linux
top コマンドでプロセスを実行している CPU をみる方法のメモ。

top コマンドを実行中に f を押すと、表示項目の選択肢が表示されます。
Current Fields:  AEHIOQTWKNMbcdfgjplrsuvyzX  for window 1:Def
Toggle fields via field letter, type any other key to return

* A: PID        = Process Id
* E: USER       = User Name
* H: PR         = Priority
* I: NI         = Nice value
* O: VIRT       = Virtual Image (kb)
* Q: RES        = Resident size (kb)
* T: SHR        = Shared Mem size (kb)
* W: S          = Process Status
* K: %CPU       = CPU usage
* N: %MEM       = Memory usage (RES)
* M: TIME+      = CPU Time, hundredths
  b: PPID       = Parent Process Pid
  c: RUSER      = Real user name
  d: UID        = User Id
  f: GROUP      = Group Name
  g: TTY        = Controlling Tty
  j: P          = Last used cpu (SMP)
  p: SWAP       = Swapped size (kb)
  l: TIME       = CPU Time
  r: CODE       = Code size (kb)
  s: DATA       = Data+Stack size (kb)
  u: nFLT       = Page Fault count
  v: nDRT       = Dirty Pages count
  y: WCHAN      = Sleeping in Function
  z: Flags      = Task Flags 
* X: COMMAND    = Command name/line


"Last used cpu" を表示したいので、j を押して、リターンキーを押すと元の画面に戻ります。
先頭から順に表示されるので、TIME+ と COMMAND の間に表示される P が CPU の id です。
top - 19:20:32 up 340 days,  4:25,  3 users,  load average: 1.03, 1.21, 1.32
Tasks: 221 total,   2 running, 219 sleeping,   0 stopped,   0 zombie
Cpu(s):  4.0%us,  2.1%sy,  0.0%ni, 85.7%id,  8.1%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:  37017500k total, 36737920k used,   279580k free,   140708k buffers
Swap:  1048572k total,   388416k used,   660156k free, 18871820k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  P COMMAND



pythonでプロファイルをとる方法

2018-09-08 19:44:42 | python
python でプロファイルをとる方法のメモ。

python -m cProfile -s tottime {pythonプログラム}.py


プログラム終了時に標準出力にプロファイル結果が出力されるため、
プログラム自体は標準出力に何も出力しないようにしておくほうがよさそう。