負荷試験とツール

負荷テストツールには、Apache Bench, Apache JMeter, Locust, Tsung, Gatling, Vegetaなどがある。
Apache BentchとVegetaはシナリオテストができない。

### 負荷テストのアプローチ
– 性能テスト: システムが想定している負荷に対し、どの程度のスループットやレイテンシかを確認
– 限界テスト: 処理限界に近い、または超過した負荷に対し、エラーが出るかなど挙動を確認
– 耐久テスト: 長時間負荷をかけた際の挙動を確認

計画書作成、スペックを変更、ダミーデータ作成、負荷テストと負荷テストツールの作成、単一エンドポイントに対するテスト、オートスケールを有効にした場合のテスト、シナリオテスト、耐久テスト

スループットの限界値を見つけるために、同時にアクセスするユーザ数を徐々に上げていく

なるほど、かなり奥が深い

Linux 負荷監視コマンド

vstat: システム全体の負荷
top: CPU, メモリを食っているプロセスの特定
sar: 過去の負荷の履歴
mpstat -P ALL 1: CPUコアごとの負荷
dstat -taf 標準でインストールされているコマンド
free -m メモリ
iostat -dmxt 1: IO状況

CPU使用率は $ vmstat で 100 – id の値

$ vmstat
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 2193996 89188 931568 0 0 4835 383 460 846 9 10 80 1 0
free, buff, cacheが少ないと問題
us, syがカーネル、カーネル以外のCPU使用率

$ top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
726 root 20 0 874552 38992 20220 S 12.5 1.0 0:01.93 snapd
1 root 20 0 105056 12924 8252 S 0.0 0.3 0:02.41 systemd

$ sudo apt install dstat
$ dstat -taf
Terminal width too small, trimming output.
—-system—- –total-cpu-usage– -net/enp0s3–net/enp0s8 —paging–>
time |usr sys idl wai stl| recv send: recv send| in out >
17-08 06:52:38| 2 1 96 0 0| 0 0 : 0 0 | 0 0 >
17-08 06:52:39| 0 0 100 0 0| 180B 534B: 0 0 | 0 0 >
17-08 06:52:40| 0 1 97 2 0| 120B 220B: 0 0 | 0 0 >
17-08 06:52:41| 0 0 100 0 0| 120B 204B: 0 0 | 0 0 >^

cpu負荷をコアごと、IO負荷をディスクごと、ネットワーク転送量をインターフェイスごとに表示

https://qiita.com/aosho235/items/c4d6995743dd1dac16e1

/dev/urandomとは

入力元として取ると乱数が返ってくるファイル
適当な値を取るときに使う

$ head -c 200m /dev/urandom > test.txt
$ cat test.txt
?x??y??Q%s}?Gz?¯???$?_?g7T!L??+\?*???f>?$????Q?7?????i%?M??X???? BY?P??”?gO?%Š??O??/??j?n??7??dnZ?…?
r????u??/???,O @ep?????>?;??’y?l?]?\e-).??Ѳ

なんかバグのようなファイルが生成される

RPMとは

RedHatLinuxのために開発されたパッケージ管理方法
標準のファイル拡張子は.rpm
複数のファイルやディレクトリをcpio形式のアーカイブファイルにまとめた形になっている
独自のspec形式ファイル、バイナリファイルやソースコードなどが格納されている
パッケージ名称、説明、種類、バージョン番号、ライセンス情報、開発元、公式サイトのURL、ツール、他のパッケージとの依存関係などの情報を記述した部分と、シェルスクリプトなどを記述したスクリプト部分が格納

apr rpmはapache
apr-util は依存関係
httpd rpm
libfontenc rpm
libXfont rpm
xorg-x11 rpm : x window system

うーむ、DMZのapache設定がわからん…

RHEL8のSELinuxの無効化

(13)Permission denied: AH00072: make_sock: could not bind to address [::]:20080
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:20080

SELinuxとは? : 強制アクセス制御を実現するセキュリティ機構
Security-Enhanced-Linux
アクセス制御に使う

$ getenforce
Enforcing
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33

### 一時的に無効化
$ sudo setenforce 0
$ getenforce
Permissive

### 恒久的に無効化
$ sudo cp -piv /etc/selinux/config /etc/selinux/config.`date “+%Y%m%d”`
$ sudo vi /etc/selinux/config

# SELINUX=enforcing
SELINUX=disabled

$ sudo systemctl restart httpd
$ systemctl status httpd.service

なるほど

systemdの*.serviceの書き方

ディレクトリ: /etc/systemd/system/*.service

[Unit]
Description=Load dump capture kernel
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/opt/bin/run-kexect.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Unit, Service, Installのセクションから成り立ち、Unit, Installは共通的な設定内容、Serviceはサービスを実行するため

### Unitセクション
Description: ユニットの説明
After/Bifore: 指定したユニットの実行順番。Afiter=bar.serviceの場合、bar.serviceのstart-up処理が終わるまで実行しない
Requires/Wants: ユニットの依存関係の定義 Wants=bar.service など
その他: man 5 systemd.unit

### Serviceセクション
Type: Typeには以下の5つがあり、設定がなければsimpleがデフォルトで使用される
L simple, forking, oneshot, notify, dbus
ExecStart: 実行するコマンドラインを書く
RemainAfterExit: typeがoneshotの場合は、コマンド実行後もステータスをアクティブにする

### Installセクション
WantedBy/RequiredBy: systemctl enable xxxでユニットをenableした時に、.wants, .requiredにシンボリックリンクを作る
/etc/systemd/system/multi-user.target.wants/

なるほど

OSのユーザ作成

$ less /etc/passwd

vagrant:x:1000:1000::/home/vagrant:/bin/bash
ken:x:500:100::/home/ken:/bin/bash

ユーザ名: ken
パスワード: x
ユーザID: 500
グループID: 100
コメント:
ホームディレクトリ: /home/vagrant
ユーザが利用するシェル: /bin/bash

$ sudo useradd -u 2000 -g 2000 -m -s /bin/bash hpscript
-m は ユーザ名でホームディレクトリを作成
$ cat /etc/passwd

パスワード付与
$ sudo passwd hpscript

なるほどー 理解した

OSのグループ、ユーザー

Linuxでは複数のユーザが使用することを想定しているため、グループを作って、一括でまとめて管理できるようにしている。

### グループ一覧の確認
$ cat /etc/group
e.g.
linuxacademy:x:1001:student
グループ名: linuxacademy
パスワード: x(セキュリティ上表示しない)
グループ番号(GID): 1001
所属メンバー一覧: student

### グループを操作
groupaddコマンド: グループを追加
groupmodコマンド: グループを編集
groupdel: グループを削除

### グループにメンバーを追加・解除
usermodコマンド

### ファイルやディレクトリに対してグループのアクセス権を設定
chmodコマンド

### グループ作成
-g: グループIDを指定する
$ sudo groupadd -g 2000 hpscript

なるほどー 実際に手を動かして大分理解した。

EC2 RHEL8にpostgresqlを入れたい

コンソール上でRHEL8のEC2を起動する

$ ssh ec2-user@* -i ~/.ssh/*.pem
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.5 (Ootpa)

### リポジトリの追加
$ sudo yum -y localinstall https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
$ sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

### postgresqlインストール
$ yum install postgresql postgresql-server
– バージョン確認
$ rpm -qa | grep postgres
postgresql-server-10.19-1.module+el8.6.0+13642+78853f5a.x86_64
postgresql-10.19-1.module+el8.6.0+13642+78853f5a.x86_64
– アカウントが作成されていることを確認
$ cat /etc/passwd | grep postgres
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash

### DBセットアップ
$ sudo su – postgres
$ postgresql-setup initdb

### 起動及び自動起動の設定
– プロセス確認
$ ps -ef | grep postgres
$ systemctl status postgresql -l –no-pager
$ sudo systemctl start postgresql
$ systemctl status postgresql -l –no-pager
$ sudo systemctl enable postgresql

### Postgresへログイン
$ su – postgres
$ sudo su – postgres
$ psql
postgres=#

OKKKKKKKKKKKK
postgresqlのバージョンが気になるので要確認