Closed7
ぴよぴよisucon
これを読んでためになったことをメモる
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
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
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 |
+-------+--------+--------------------------+---------+-------+
MySQLのDSN
このスクラップは2023/02/26にクローズされました