Closed7

ぴよぴよisucon

Yuuki TakahashiYuuki Takahashi

localhost:80というエンドポイントが与えられた時、そこからどのようなバックエンドがあるかわかるための方法

$ sudo lsof -i:80
nginx     1038     root    6u  IPv4  21800      0t0  TCP *:http (LISTEN)

# nginxとわかればnginx.confを探す
$ sudo find /etc/ -name 'nginx.conf'
/etc/nginx/nginx.conf

# ログはここ
$ cat /etc/nginx/nginx.conf | egrep 'access_log'
    access_log /var/log/nginx/access.log;
# バックエンドサービスは8000っぽい
cat /etc/nginx/nginx.conf | egrep 'server'
        server 127.0.0.1:8000;

# 8000でどんなものが立ち上がっているか
# PIDがわかる
$  sudo lsof -i:8000
COMMAND PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
isucari 977 isucon    3u  IPv6  20270      0t0  TCP *:8000 (LISTEN)
# PIDに対応する処理は何か
$ ls -al /proc/977/exe
lrwxrwxrwx 1 isucon isucon 0 Jul 22 17:31 /proc/977/exe -> /home/isucon/isucon9-qualify/webapp/go/isucari

# そのディレクトリにおいてあるもの
$ ls -l $(dirname $(realpath /proc/977/exe))
total 12140
-rw-rw-r-- 1 isucon isucon       72 Jul 22 15:51 Makefile
-rw-rw-r-- 1 isucon isucon     4689 Jul 22 15:51 api.go
-rw-rw-r-- 1 isucon isucon      265 Jul 22 15:51 go.mod
-rw-rw-r-- 1 isucon isucon     1844 Jul 22 15:51 go.sum
-rwxrwxr-x 1 isucon isucon 12347662 Jul 22 16:16 isucari
-rw-rw-r-- 1 isucon isucon    60802 Jul 22 15:51 main.go
Yuuki TakahashiYuuki Takahashi

DB接続情報

$ grep -rn 'MYSQL_HOST=' ~/
/home/isucon/env.sh:1:MYSQL_HOST=127.0.0.1

$ cat /home/isucon/env.sh
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=isucari
MYSQL_DBNAME=isucari
MYSQL_PASS=isucari

$ mysql -uisucari -pisucari
mysql> 

# 設定ファイル読み込み順
$ mysql --help | grep "Default options" -A1
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 

# どのファイルが実際に存在するか
$ ls -l /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
ls: cannot access '/etc/my.cnf': No such file or directory
ls: cannot access '/home/isucon/.my.cnf': No such file or directory
lrwxrwxrwx 1 root root 24 Jul 22 15:45 /etc/mysql/my.cnf -> /etc/alternatives/my.cnf

# 設定
$ cat /etc/alternatives/my.cnf
略

# インクルードされている設定も確認
$ cat /etc/alternatives/my.cnf | grep '!include'
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

# ログ出力状況
# スロークエリがコメントアウトされてそう
$ egrep -irn "general_log|log_error|slow_query_log" /etc/alternatives/my.cnf /etc/mysql/conf.d/ /etc/mysql/mysql.conf.d/
/etc/mysql/mysql.conf.d/mysqld.cnf:68:#general_log_file        = /var/log/mysql/mysql.log
/etc/mysql/mysql.conf.d/mysqld.cnf:69:#general_log             = 1
/etc/mysql/mysql.conf.d/mysqld.cnf:73:log_error = /var/log/mysql/error.log
/etc/mysql/mysql.conf.d/mysqld.cnf:76:#slow_query_log           = 1
/etc/mysql/mysql.conf.d/mysqld.cnf:77:#slow_query_log_file      = /var/log/mysql/mysql-slow.log
Yuuki TakahashiYuuki Takahashi

alp

https://github.com/tkuchiki/alp

# インストール
$ wget -q https://github.com/tkuchiki/alp/releases/download/v1.0.3/alp_linux_amd64.zip
$ unzip alp_linux_amd64.zip
$ ./alp --version

# 集計結果
$ sudo ./alp ltsv --file=/var/log/nginx/access.log -r --sort=sum \
> --output="count,method,uri,sum,avg" \
> -m "/items/[0-9]+.json,/upload/[0-9a-z]+.jpg,/transactions/[0-9]+.png,/users/[0-9]+.json,/new_items/[0-9]+.json,/static/*"
+-------+--------+--------------------------+---------+-------+
| COUNT | METHOD |           URI            |   SUM   |  AVG  |
+-------+--------+--------------------------+---------+-------+
|   134 | GET    | /users/transactions.json | 368.885 | 2.753 |
|   429 | GET    | /new_items/[0-9]+.json   | 245.174 | 0.572 |
|   225 | GET    | /users/[0-9]+.json       |  99.372 | 0.442 |
|    66 | GET    | /new_items.json          |  64.460 | 0.977 |
|    35 | POST   | /buy                     |  32.119 | 0.918 |
|    59 | POST   | /login                   |  29.048 | 0.492 |
|  1510 | GET    | /items/[0-9]+.json       |  18.384 | 0.012 |
|    23 | POST   | /ship                    |  12.112 | 0.527 |
|    23 | POST   | /ship_done               |  10.856 | 0.472 |
|    13 | POST   | /complete                |   8.188 | 0.630 |
|     1 | POST   | /initialize              |   7.492 | 7.492 |
|    51 | GET    | /settings                |   4.556 | 0.089 |
|    38 | POST   | /sell                    |   4.248 | 0.112 |
|    13 | POST   | /bump                    |   0.760 | 0.058 |
|     6 | POST   | /items/edit              |   0.136 | 0.023 |
|    55 | GET    | /upload/[0-9a-z]+.jpg    |   0.108 | 0.002 |
|    20 | GET    | /transactions/[0-9]+.png |   0.052 | 0.003 |
|     4 | GET    | /static/*                |   0.004 | 0.001 |
|     1 | GET    | /reports.json            |   0.004 | 0.004 |
+-------+--------+--------------------------+---------+-------+
このスクラップは2023/02/26にクローズされました