Cara menggunakan php benchmark script

Ada banyak cara untuk melakukan benchmark sebuah arsitektur server. Salah satunya adalah dengan menggunakan Apache Benchmark. Pada artikel ini, kita akan membahas cara melakukan benchmark menggunakan Apache Benchmark pada sebuah LAMP server yang didalamnya terdapat Aplikasi WordPress. Untuk mempermudah pembahasan, saya akan menggunakan topologi server seperti pada Gambar 1.

Gambar 1. Topologi Jaringan

Kedua server dalam topologi tersebut saya buat menggunakan VirtualBox dengan spesifikasi

Gambar 2. Spesifikasi Virtual Machine

dan keduanya sama-sama menggunakan Sistem Operasi Ubuntu 16.04.

Instalasi LAMP Server

Anda dapat membuat LAMP server (192.168.1.101) dengan mengikuti panduan yang telah saya tuliskan pada artikel berikut

Instalasi Linux, Apache, MySQL, PHP (LAMP) stack pada Ubuntu 16.04

LAMP stack adalah kumpulan beberapa perangkat lunak open source yang digunakan secara bersamaan untuk membangun sebuah…

medium.com

Di dalam LAMP server (192.168.1.101) tersebut anda perlu meng-install WordPress. Anda dapat membuatnya dengan mengikuti panduan instalasi WordPress saya tuliskan dalam artikel berikut

Instalasi WordPress Pada Server Linux

WordPress adalah open-source Content Management System (CMS) berbasis PHP dan MySQL (atau MariaDB). WordPress merupakan…

medium.com

Di dalam aplikasi WordPress tersebut juga telah saya generate 500 dummy posts menggunakan plugin WordPress FakerPress. Panduan untuk men-generate 500 dummy posts tersebut juga telah saya tuliskan pada artikel berikut.

Instalasi WordPress FakerPress

FakerPress (https://wordpress.org/plugins/fakerpress/) adalah plugin WordPress yang dapat digunakan untuk men-generate…

medium.com

Membuat Daftar URL

Sebelum melakukan benchmark, kita perlu membuat daftar URL dari posting yang telah kita siapkan menggunakan WordPress FakerPress.

1. Membuat Daftar Post ID

Masukkan ke dalam terminal MySQL di dalam LAMP server (192.168.1.101) dengan perintah

$ mysql -u root -p

masukkan password user root database MySQL. Pilih database yang digunakan oleh aplikasi WordPress, misalnya dengan perintah

mysql> USE wordpress;

Jalankan perintah berikut untuk mengetahui directory dimana kita bisa menyimpan file output dari perintah MySQL yang kita jalankan

mysql> SHOW VARIABLES LIKE "secure_file_priv";

berikut adalah contoh output pada server LAMP saya

+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.05 sec)

Jalankan perintah berikut dengan directory

mysql> SHOW VARIABLES LIKE "secure_file_priv";
1 yang disesuaikan dengan value dari variable
mysql> SHOW VARIABLES LIKE "secure_file_priv";
2 tersebut.

mysql> SELECT ID FROM wp_posts
-> WHERE post_status='publish'
-> INTO OUTFILE '/var/lib/mysql-files/ID.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';

Perintah tersebut akan menyimpan hasil query ke dalam file

mysql> SHOW VARIABLES LIKE "secure_file_priv";
3. Keluarlah dari terminal MySQL dengan perintah
mysql> SHOW VARIABLES LIKE "secure_file_priv";
4. Anda dapat mengecek file output perintah tersebut dengan perintah

$ sudo tail /var/lib/mysql-files/ID.csv

Berikut adalah contoh post ID di server saya

"943"
"945"
"947"
"949"
"951"
"953"
"955"
"957"
"959"
"961"

2. Memindahkan File Post ID

Kita perlu memindahkan file

mysql> SHOW VARIABLES LIKE "secure_file_priv";
3 dari server LAMP (192.168.1.101) ke server Apache Benchmark (192.168.1.110). Ada berbagai cara yang dapat anda lakukan untuk memindahkan file tersebut. Dalam artikel ini kita akan menggunakan
mysql> SHOW VARIABLES LIKE "secure_file_priv";
6. Dari command line server LAMP (192.168.1.101), jalankan perintah berikut

$ sudo scp /var/lib/mysql-files/ID.csv [email protected]:~/ID.csv

sesuaikan user

mysql> SHOW VARIABLES LIKE "secure_file_priv";
7 dengan user pada server Apache Benchmark. File
mysql> SHOW VARIABLES LIKE "secure_file_priv";
8 tersebut tersimpan ke dalam home directory user
mysql> SHOW VARIABLES LIKE "secure_file_priv";
7 dalam Apache Benchmark server.

3. Membuat Daftar URL

Masuklah ke terminal di server Apache Benchmark (192.168.1.110). Masuklah ke dalam directory tempat file

mysql> SHOW VARIABLES LIKE "secure_file_priv";
8 disimpan, lalu jalankan perintah berikut untuk membuat daftar URL dari file
mysql> SHOW VARIABLES LIKE "secure_file_priv";
8.

$ cat ID.csv | sed 's/.$//' | sed 's/\"/http:\/\/192.168.56.101\/?p=/g' > URL.txt

Hasil dari perintah tersebut adalah file

+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.05 sec)
2 yang berisi seluruh URL posting yang ada dalam WordPress. Bila anda melihat isi dari file
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.05 sec)
2 dengan perintah

$ tail URL.txt

anda akan mendapat output berikut

mysql> USE wordpress;
0Konfigurasi Permalink

1. Merubah Permission .htaccess

Kita perlu mengganti permalink pada WordPress agar posting pada diakses menggunakan URL yang telah kita siapkan. Sebelum anda merubah konfigurasi permalink, pastikan file

+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.05 sec)
4 dalam di root directory WordPress bersifat writable oleh user
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.05 sec)
5. Jalankan perintah

mysql> USE wordpress;
1

Masukkan ke dalam halaman administrator WordPress melalui ke URL

+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.05 sec)
6. Kemudian masukkan ke menu
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.05 sec)
7.

Gambar 3. Konfigurasi Permalinks

Pilih setting

+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.05 sec)
8 dan simpan konfigurasi dengan menekan tombol
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.05 sec)
9.

3. Mengembalikan Permission .htaccess

Kembalikan permission .htaccess untuk meningkatkan keamanan WordPress anda dengan perintah

mysql> USE wordpress;
2Instalasi Server Apache Benchmark

Ada dua program yang perlu kita install dalam server Apache Benchmark (192.168.1.110), yaitu

mysql> SELECT ID FROM wp_posts
-> WHERE post_status='publish'
-> INTO OUTFILE '/var/lib/mysql-files/ID.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
0 dan
mysql> SELECT ID FROM wp_posts
-> WHERE post_status='publish'
-> INTO OUTFILE '/var/lib/mysql-files/ID.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
1.
mysql> SELECT ID FROM wp_posts
-> WHERE post_status='publish'
-> INTO OUTFILE '/var/lib/mysql-files/ID.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
0 adalah package yang berisi beberapa tools terkait Apache, termasuk diantaranya adalah
mysql> SELECT ID FROM wp_posts
-> WHERE post_status='publish'
-> INTO OUTFILE '/var/lib/mysql-files/ID.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
3 (Apache Benchmark). Sedangkan
mysql> SELECT ID FROM wp_posts
-> WHERE post_status='publish'
-> INTO OUTFILE '/var/lib/mysql-files/ID.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
1 adalah program untuk menjalankan beberapa program secara concurrent pada sistem operasi Linux.
mysql> SELECT ID FROM wp_posts
-> WHERE post_status='publish'
-> INTO OUTFILE '/var/lib/mysql-files/ID.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
3 hanya dapat melakukan benchmark pada satu URL dalam satu kali running, sehingga kita memerlukan
mysql> SELECT ID FROM wp_posts
-> WHERE post_status='publish'
-> INTO OUTFILE '/var/lib/mysql-files/ID.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
1 untuk agar dapat melakukan benchmark beberapa URL secara bersamaan.

Cara meng-install kedua program tersebut adalah

mysql> USE wordpress;
3Melakukan Benchmark

1. Menjalankan benchmark

Langkah berikutnya adalah melakukan benchmark menggunakan perintah

mysql> SELECT ID FROM wp_posts
-> WHERE post_status='publish'
-> INTO OUTFILE '/var/lib/mysql-files/ID.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
3melalui server Apache Benchmark (192.168.1.110). Masukkan ke dalam directory tempat file
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.05 sec)
2 tersimpan lalu jalankan perintah berikut

mysql> USE wordpress;
4

Mari kita bongkar perintah tersebut dan kita bahas masing-masing fungsinya.

mysql> USE wordpress;
5

berfungsi menampilkan 50 baris terakhir dari file

+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.05 sec)
2. Hasil dari perintah tersebut kemudian kita jadikan input untuk perintah selanjutnya menggunakan perintah
$ sudo tail /var/lib/mysql-files/ID.csv
0.

mysql> USE wordpress;
6

akan menjalankan perintah

$ sudo tail /var/lib/mysql-files/ID.csv
1 secara paralel dan menyimpan output ke dalam file
$ sudo tail /var/lib/mysql-files/ID.csv
2. Hal ini dimungkinkan karena kita memberikan perintah
$ sudo tail /var/lib/mysql-files/ID.csv
3 diantara dua perintah tersebut.

$ sudo tail /var/lib/mysql-files/ID.csv
4 dan
$ sudo tail /var/lib/mysql-files/ID.csv
5 adalah input hasil parsing URL input menggunakan argumen
$ sudo tail /var/lib/mysql-files/ID.csv
6. Misalkan hasil pembacaan perintah tail adalah
$ sudo tail /var/lib/mysql-files/ID.csv
7, maka variable
$ sudo tail /var/lib/mysql-files/ID.csv
4 dan
$ sudo tail /var/lib/mysql-files/ID.csv
5 akan bernilai
"943"
"945"
"947"
"949"
"951"
"953"
"955"
"957"
"959"
"961"
0 dan
"943"
"945"
"947"
"949"
"951"
"953"
"955"
"957"
"959"
"961"
1.

2. Output benchmark

Output dari perintah benchmark tersebut adalah file

"943"
"945"
"947"
"949"
"951"
"953"
"955"
"957"
"959"
"961"
2 dengan nomor yang sesuai dengan ID post WordPress yang diuji. Gambar 4 adalah daftar file output di server Apache Benchmark yang saya gunakan

Gambar 4. Contoh hasil output

Berikut adalah contoh isi dari file

"943"
"945"
"947"
"949"
"951"
"953"
"955"
"957"
"959"
"961"
3.

mysql> USE wordpress;
7

3. Contoh-contoh Perintah Benchmark

Berikut saya berikan beberapa contoh perintah opsi benchmark yang dapat anda gunakan.

Contoh 1

mysql> USE wordpress;
4

Perintah ini akan menjalankan 50 program

mysql> SELECT ID FROM wp_posts
-> WHERE post_status='publish'
-> INTO OUTFILE '/var/lib/mysql-files/ID.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
3 dengan URL berbeda dimana masing-masing program
mysql> SELECT ID FROM wp_posts
-> WHERE post_status='publish'
-> INTO OUTFILE '/var/lib/mysql-files/ID.csv'
-> FIELDS TERMINATED BY ','
-> ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
3 akan menjalankan 2 koneksi secara concurrent dengan total koneksi sebanyak 20.

Bila dijumlahkan, maka akan ada 1000 koneksi concurrent dengan total 2000 koneksi yang masuk ke server.