Status scoreboard Apache penuh dengan ‘R’

Kemarin (21/03/2025), saya menjumpai masalah di salah satu server. Tetiba, server web tidak bisa diakses. Pengecekan status Apache di scoreboard menunjukkan koneksinya penuh terisi dengan ‘R’.

$ apachectl status

Status ‘R’ ini menunjukkan bahwa server sedang membaca permintaan HTPP dari client.

Biasanya, yang dilakukan adalah dengan merestart server web Apache. Namun, tak lama setelah restart, scoreboard kembali penuh. Bahkan, ketika konfigurasi limit servernya dinaikkan, tetap langsung penuh. Berarti ada masalah lain.

Banyak request yang stuck di ‘R’ bisa mengindikasikan adanya serangan Slowloris. Banyak koneksi yang open dan tetap dibiarkan open selama mungkin. Ini yang membuat scoreboard Apache selalu penuh. Koneksi tidak closed atau finished.

Setelah terinstall, konfigurasi bisa ditambahkan di /etc/apache2/conf.d/mod_reqtimeout.conf dan /etc/apache2/conf.d/qos.conf.

# /etc/apache2/conf.d/mod_reqtimeout.conf 
<IfModule mod_reqtimeout.c>
  RequestReadTimeout header=20-40,MinRate=500 body=20-40,MinRate=500
</IfModule>

Server akan menunggu sampai 20 detik untuk header/body data. Jika, rate minimal 500 bps, server akan menunggu header/body lengkap sampai 40 detik.

# /etc/apache2/conf.d/qos.conf
<IfModule qos_module>
  # handle connections from up to 100000 different IPs
  QS_ClientEntries 100000

  # allow only 50 connections per IP
  QS_SrvMaxConnPerIP 50

  # MaxClients/MaxRequestWorkers is set in MaxRequestWorkers in Cpanel WHM

  # disables keep-alive when 180 (70%) TCP connections are occupied
  QS_SrvMaxConnClose 180

  # minimum request/response speed
  # (deny slow clients blocking the server, keeping connections open without requesting anything)
  QS_SrvMinDataRate 150 1200
</IfModule>

Server akan menangani sampai maksimum 100.000 alamat IP. Per alamat IP dibatasi 50 koneksi. Keep-alive akan didisabled jika telah ada 180 koneksi TCP. Kecepatan request /response dibatasi minimum 150/1200 untuk menolak client yang lambat.

# tail -f /var/log/apache2/error_log 
[qos:error] [pid 5491:tid 5507] mod_qos(034): access denied, QS_SrvMinDataRate rule (in:0): min=220, this connection=0, c=114.10.104.6
[qos:error] [pid 5308:tid 5323] mod_qos(034): access denied, QS_SrvMinDataRate rule (in:0): min=191, this connection=0, c=140.213.15.164
[qos:error] [pid 5548:tid 5562] mod_qos(034): access denied, QS_SrvMinDataRate rule (in:0): min=204, this connection=0, c=103.47.133.116

Beberapa request yang ditolak salah satunya adalah dari bot AI. Koneksi tidak closed.

Mudah2an sekarang ndak ada masalah lagi.

Referensi:

Exploratory, Descriptive, and Explanatory Research

Sementara masih mencoba mengumpulkan pengertian pendekatan metodologi riset: exploratory, descriptive, dan explanatory. Agar bisa lebih paham… hehehe.. Sumber masuknya dari Wikipedia dan Scribbr dulu.

Exploratory research

Ada yang menyebut sebagai formulative research. Kata kunci metode ini:

  • Didesain untuk mendapatkan pemahaman lebih tentang peminatan topik tertentu
  • Bertujuan untuk mendapatkan informasi awal yang dapat digunakan untuk mendefinisikan problem dan mengajukan hipotesis
  • Umumnya dilakukan secara kualitatif. Untuk data besar, analisis kuantitatif juga kadang dilakukan

Contoh artikel dengan judul eksplisit:

Descriptive study

Kata kunci metode ini:

  • Bertujuan untuk mendeskripsikan karakteristik dari beragam aspek.
  • Menjawab pertanyaan apa karakteristik dari populasi atau situasi yang sedang dikaji
  • Melibatkan beberapa metode seperti studi kasus, surveys, dan laporan kasus

Contoh artikel dengan judul eksplisit:

Explanatory research

Ada yang menyebut causal research, confirmatory. Kata kunci metode ini:

  • Meneliti tentang hubungan kausalitas antar variabel.
  • Objektif risetnya menguji hipotesis tentang hubungan sebab-akibat

Contoh artikel dengan judul eksplisit:

Hanya sebagai referensi saya saja. Itu saja, hehehe. Akan senang kalau ada yang bisa membantu menjelaskannya.

Penjaminan mutu di DOAJ

DOAJ telah menyampaikan dua tulisan di blognya. Bagian pertama tentang bagaimana mereka menjaga kualitas di DOAJ [1]. Bagian 2 tentang perkembangan jurnal-jurnal yang ada di DOAJ [2].

Bagian pertama menunjukkan komitmen DOAJ dan timnya untuk menjaga kepercayaan komunitas keilmuan dalam penerbitan jurnal dengan memastikan jurnal ‘questionable’ tidak masuk dalam indeksnya. Mereka memastikan kualitas dan praktek penerbitan jurnal dan penerbit. Top bgt.

Jurnal yang mengajukan indeksasi akan diteliti oleh tim ini, terutama dalam pemenuhan standar dan transparansi COPE [3]. Tim ini juga melakukan investigasi dan evaluasi kembali saat jurnal/publisher yang telah terindeks di DOAJ teridentifikasi melakukan praktek-praktek yang ‘questinable’.

Dikutip dari tulisan tersebut, ada lima area kunci yang dievaluasi:

  1. Adanya informasi yang jelas dan dapat dipercaya di situs jurnal
  2. Komposisi dewan editor jurnal
  3. Proses peer-revieww yang menyeluruh dan robust untuk memastikan reliabilitas isi artikel publikasi
  4. Reputasi jurnal –> jurnal sebaiknya menghindari penggunaan informasi yang mis-leading dan metrik non-standar yang ‘questionable’, contohnya Index Copernicus [4]
  5. Manajemen dan operasi jurnal

Di bagian dua, dinyatakan trend penambahan jurnal yang diinvestigasi sebesar 40% di tahun 2004 sejak 2021. Penerbit Indonesia masuk ke dua besar (Lihat gambar [2]). Praktek questionable yang sering dilakukan:

  • Isu kualitas yang beragam yang terkait dengan dewan editor jurnal, seperti asal mencantumkan nama, kredential yang tidak bisa diverifikasi
  • Informasi kunci yang tidak jelas atau tidak dapat dipercaya di situs web
  • Jangka publikasi yang sangat cepat, misalnya dua minggu dari submit
  • Desain situs web yang tidak bagus
  • Status indeksing yang salah direpresentasikan, misalnya mencantumkan logo indekser yang tidak bisa ditelusuri atau indexer yang metricnya diragukan

Referensi:

  1. Inside the Quality Team – Part 1: How We Preserve Quality at DOAJ
  2. Inside the Quality Team – Part 2: Key trends from our work
  3. DOAJ, Guide to applying
  4. Wikipedia: Index Copernicus

Efisiensi bikin orang kreatif

Saya kebetulan orang engineering. Dan dosen.

Dalam beberapa kesempatan, saya sampaikan ke mahasiswa tentang konsep desain sistem, terutama konstrain, performansi, dan trade-off. Salah satu ukuran performansi adalah efisien, yang biasanya disebabkan oleh adanya batasan. Pemenuhan spesifikasi dan kostrain ini menjadi sasaran desain ini.

Tapi, bukan itu yang akan saya ulas di sini.. hehehe..

Tiga harian ini sudah tidak bisa menggunakan akun pengecekan grammar profesional yang dilanggan karena ada problem di penyedia /vendor. Padahal, lagi butuh-butuhnya untuk menulis artikel. Hanya bisa pakai yang versi free, sambil menunggu perbaikan dari vendor.

Belum lagi ada kabar kapasitas penyimpan drive resmi institusi di cloud dibatasi, hanya 100MB. Padahal, form ujian online untuk mahasiswa dan file-file jawaban tersimpan di sana. Termasuk untuk unggah dokumen-dokumen TA mahasiswa.

Ditambah, kapasitas Gmail institusional juga dibatasi, hanya menjadi 15GB. Padahal, banyak file yang terbackup di sana. File macem-macem juga. Ndak tahu sih.. file-nya penting atau tidak.. hahaha.

Apa lagi yah? Hehehe..

Berarti harus kreatif dong? Tentu saja.

Tapi, bagaimana? Hehehe, nanti aja.

Selamat datang kembali

Bismillah.

Hari ini mencoba menengok kembali blog yang sudah lama tidak aktif.

Kesan pertama adalah perubahan fitur-fitur WordPress yang semakin top. Saya tertinggal banyak. Sambil berjalan, akan coba diterapkan.

Pertama, saya coba bersih-bersih tampilan, terutama Widget.

RSS yang tidak diperlukan lagi dilepas karena tidak ada update apapun, salah satunya Machine Learning Proc (http://proceedings.mlr.press/feed.xml). RSS lama pun diupdate, misalnya dari LPPM Undip, yang diubah menjadi https://lppm.undip.ac.id/feed, walaupun ada catatan. Jumlah post RSS tidak bisa dibatasi.. hehehe.

Sementara itu. Nanti akan dilanjut. Mudah2an konsisten.

Seputar Aktivitas Setelah UAS

Sudah lama tidak menengok dan mengisi blog ini.

Minggu ini adalah masa pengisian nilai mahasiswa di Sistem Informasi Akademik (SIA) menjelang yudisium. Dan, ini biasanya cukup melelahkan, hehehe.

Saya mengajar 4 kelas mata kuliah Metode Numerik dengan jumlah mahasiswa tiap kelas yang cukup banyak. Ada beberapa komponen penilaian yang harus dimasukkan, salah satunya nilai UAS.

Soal UAS saya buat menggunakan Form Office dan diakses secara online oleh mahasiswa. Hasil dari ujian daring tersebut tersedia dalam bentuk spreadsheet.

Untuk memasukkan nilai ke SIA, ada file yang daftar mahasiswa yang bisa diunduh dan diunggah kembali saat nilai sudah dimasukkan. Sebelumnya, saya masukkan manual dari hasil ujian ke file SIA. Dan ini memerlukan konsentrasi agar tidak ada nilai yang keliru. Harus Akurat dan presisi, kwkwkw.

Kebiasaan orang teknik, bikin tool untuk membantu kerja. Dibuatlah pakai Python.. hahaha. Ini kodenya.

#!/usr/bin/env python
# Match marks from online testing to SIA

import pandas as pd

SIAP = ["SIAP_TemplateNilai_PTSK6412_2023_2_A", 
  "SIAP_TemplateNilai_PTSK6412_2023_2_B",
  "SIAP_TemplateNilai_PTSK6412_2023_2_C",
  "SIAP_TemplateNilai_PTSK6412_2023_2_D"]
  
NILAI = "UAS_PTSK6412_2023_2"

ni = pd.read_csv(NILAI + ".csv", sep=";")[['Name', 'Total points']]
ni['NIM_src'] = ni['Name'].apply(lambda x: x.split()[-1]).astype(str)

for si in SIAP:
  src = pd.read_csv(si + "_Src.csv", sep=";")
  src['NIM'] = src['NIM'].astype(str)
  src = pd.merge(src, ni[['NIM_src', 'Total points']], how='left', left_on=['NIM'], right_on = ['NIM_src'])
  
  src.drop_duplicates(['NIM', 'Nama Mahasiswa'], keep='last').to_csv(si + "_Out.csv", sep=';')

Ndak perlu dijabarkan logiknya yah.. hehe. Intinya menggabungkan (merge) nilai ujian ke tempate nilai tiap kelas dengan mencocokan NIM.

Yup, masalah selesai… hahaha.

EPS dan Python

EPS (earning per share) dapat menjadi indikator profitabilitas emiten dan dinyatakan sebagai laba usaha emiten (company’s profit) dibagi jumlah saham beredar (outstanding shares). EPS merupakan salah satu indikator yang digunakan dalam analisis fundamental suatu emiten.

Python akan digunakan untuk mengolah data EPS yang diperoleh (secara harian) serta menampilkannya dalam quartal dan pertumbuhannya.

Otak-atik gathuk judulnya ….hehehe

EPS umumnya dihitung per-quartal setelah keluar laporan keuangan (LK) kuartalan yang memuat laba bersih perusahaan. Dan tiap emiten berbeda pengumuman LK-nya dan tidak mesti di awal bulan kuartal. Ini problemnya…

Sementara yang bisa dilakukan adalah mengambil data EPS tiap emiten setiap hari. Secara otomatis dan bersama data fundamental lainnya tentunya…

Ini contoh datanya: (sayangnya dia mulai dari bulan April 2023)

stock_id date eps_ttm
...
3 PGAS 2023-04-12 204.98
4 PGAS 2023-04-13 204.98
5 PGAS 2023-04-17 209.84
6 PGAS 2023-04-18 209.84
7 PGAS 2023-04-26 209.84
...

Continue reading “EPS dan Python”

Tuning Server MySQL (Ceritanya)

Ceritanya respons layanan web ejournal dengan OJS sangat lambat. Penyebabnya ndak paham pasti: bisa jadi jaringan, server, atau middle-ware (web proxy, firewall). Salah satunya mungkin karena server MySQL yang responsnya lambat.

Walaupun fungsionalnya jalan, namun performansinya terasa buruk, loading halaman web sangat lama, dan ini mengganggu. Penyebabnya perlu ditelusuri.

Sasaran pertama adalah tuning server MySQL. Server web Apache dengan MPM Prefork dan PHP-FPM akan disetel default dengan penambahan kapasitas server dan child yang terkontrol.

Perangkat bantu yang digunakan dalam tuning adalah htop dan mysqladmin. Status server web dipantau dengan apachectl status dan status php-fpm dari halaman status php dengan curl. Semuanya dilakukan dari konsol. Hehehe. Perintahnya kira-kira seperti ini:

$ htop
$ mysqladmin proc stat
$ watch -n 5 apachectl status
$ watch -n 5 curl https://<url_jurnal>/status.phtml --silent
Continue reading “Tuning Server MySQL (Ceritanya)”

Melihat TTFB di Console

TTFB (Time to First Byte) suatu halaman web dapat diamati dengan Developer Tools yang ada browser (misalnya Chrome) dari Timing Network. Diagram timing (waterfall) ini menunjukkan bahwa browser menunggu byte respons pertama dari server.

Bagaimana mendapatkan TTFB ini menggunakan console di Linux? Seringkali waktu ini digunakan untuk menguji performansi respons server web, misalnya Apache.

Curl dapat digunakan untuk mendapatkan informasi TTFB tersebut. Perintahnya adalah:

# curl -o /dev/null -w "Connect: %{time_connect} TTFB: %{time_starttransfer} Total time: %{time_total} \n" -s https://jtsiskom.undip.ac.id
Connect: 0,520179 TTFB: 7,689596 Total time: 12,632399

Waktu TTFB-nya terlalu lama sekitar 7 detik lebih. Hal ini bisa menunjukkan ada masalah dengan server dan mungkin aplikasi webnya. Bagaimana solusinya? Belum paham, hehehe.