-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBytebench.sh
More file actions
190 lines (158 loc) Β· 9.18 KB
/
Bytebench.sh
File metadata and controls
190 lines (158 loc) Β· 9.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#!/bin/bash
# VPS Benchmark Tool by Thomas U. (v2.0)
export LC_ALL=C
DURATION=30
SINGLE_THREADS=1
MULTI_THREADS=$(nproc)
WEBHOOK_URL="WEBHOOK-URL"
SERVER_NAME="DEIN VPS NAME"
HOSTNAME=$(hostname)
DATE=$(TZ="Europe/Berlin" date '+%d-%m-%Y %H:%M:%S')
OS_VERSION=$(lsb_release -d | cut -f2-)
# Fehlende Pakete automatisch installieren
REQUIRED=(sysbench curl bc lsb_release speedtest-cli jq fio)
echo "π¦ PrΓΌfe benΓΆtigte Pakete..."
for pkg in "${REQUIRED[@]}"; do
if ! command -v "$pkg" >/dev/null 2>&1; then
echo " β Installiere $pkg ..."
apt update -qq >/dev/null && apt install -y -qq "$pkg" >/dev/null
fi
done
# Hardware Infos
CPU_MODEL=$(lscpu | grep "Model name" | sed 's/Model name:[ \t]*//')
RAM_TOTAL=$(grep MemTotal /proc/meminfo | awk '{printf "%.0f", $2 / 1024}')
RAM_TOTAL_FMT=$(printf "%'.f" "$RAM_TOTAL")
DISK_MODEL=$(lsblk -ndo MODEL | head -n1)
if [ -z "$DISK_MODEL" ]; then DISK_MODEL=$(lsblk -ndo NAME | head -n1); fi
echo -e "\nβββββββββββββββββββββββββββββββββββββββββ"
echo -e "β VPS BENCHMARK - $SERVER_NAME"
echo -e "βββββββββββββββββββββββββββββββββββββββββ\n"
echo -e "π§ CPU Benchmarks\n"
echo " β Single-Core Test..."
CPU_SINGLE=$(sysbench cpu --threads=1 run | awk '/total number of events:/ {print $5}')
CPU_SINGLE_FMT=$(printf "%'.f" "$CPU_SINGLE")
echo " β Multi-Core Test ($MULTI_THREADS Threads)..."
CPU_MULTI=$(sysbench cpu --threads="$MULTI_THREADS" run | awk '/total number of events:/ {print $5}')
CPU_MULTI_FMT=$(printf "%'.f" "$CPU_MULTI")
echo -e "\nπΎ RAM Benchmark\n"
echo " β Memory Test lΓ€uft..."
RAM_OUTPUT=$(sysbench memory --threads=$MULTI_THREADS --time=$DURATION run)
RAM_MBPS=$(echo "$RAM_OUTPUT" | grep "MiB/sec" | sed 's/.*(\([0-9.]*\) MiB\/sec)/\1/')
RAM_OPS=$(echo "$RAM_OUTPUT" | awk '/total number of events:/ {print $5}')
RAM_MBPS_FMT=$(printf "%.2f" "$RAM_MBPS")
RAM_OPS_FMT=$(printf "%'.f" "$RAM_OPS")
echo -e "\nπ½ Disk Benchmarks (FIO)\n"
# Write Test
echo " β Write Test (Sequential)..."
FIO_WRITE=$(fio --name=write-test --size=1G --filename=/tmp/fio-testfile --bs=128k --rw=write --direct=1 --numjobs=1 --time_based --runtime=30 --group_reporting 2>&1)
WRITE_MBPS=$(echo "$FIO_WRITE" | grep "WRITE:" | awk '{print $2}' | sed 's/bw=\([0-9.]*\)MiB.*/\1/')
WRITE_IOPS=$(echo "$FIO_WRITE" | grep "WRITE:" | awk '{print $4}' | sed 's/iops=\([0-9]*\).*/\1/')
if [ -z "$WRITE_MBPS" ]; then WRITE_MBPS="0.00"; fi
if [ -z "$WRITE_IOPS" ]; then WRITE_IOPS="0"; fi
WRITE_MBPS_FMT=$(printf "%.2f" "$WRITE_MBPS")
WRITE_IOPS_FMT=$(printf "%'.f" "$WRITE_IOPS")
# Read Test
echo " β Read Test (Sequential)..."
FIO_READ=$(fio --name=read-test --size=1G --filename=/tmp/fio-testfile --bs=128k --rw=read --direct=1 --numjobs=1 --time_based --runtime=30 --group_reporting 2>&1)
READ_MBPS=$(echo "$FIO_READ" | grep "READ:" | awk '{print $2}' | sed 's/bw=\([0-9.]*\)MiB.*/\1/')
READ_IOPS=$(echo "$FIO_READ" | grep "READ:" | awk '{print $4}' | sed 's/iops=\([0-9]*\).*/\1/')
if [ -z "$READ_MBPS" ]; then READ_MBPS="0.00"; fi
if [ -z "$READ_IOPS" ]; then READ_IOPS="0"; fi
READ_MBPS_FMT=$(printf "%.2f" "$READ_MBPS")
READ_IOPS_FMT=$(printf "%'.f" "$READ_IOPS")
# Random Read/Write Test (70% Read, 30% Write)
echo " β Realistic Mixed Test (70% Read / 30% Write)..."
FIO_MIXED=$(fio --name=realistic-test --filename=/tmp/fio-testfile-mixed --size=2G --bs=64k --rw=randrw --rwmixread=70 --direct=1 --iodepth=16 --numjobs=4 --time_based --runtime=60 --group_reporting 2>&1)
MIXED_READ_MBPS=$(echo "$FIO_MIXED" | grep "READ:" | awk '{print $2}' | sed 's/bw=\([0-9.]*\)MiB.*/\1/')
MIXED_WRITE_MBPS=$(echo "$FIO_MIXED" | grep "WRITE:" | awk '{print $2}' | sed 's/bw=\([0-9.]*\)MiB.*/\1/')
MIXED_READ_IOPS=$(echo "$FIO_MIXED" | grep "READ:" | awk '{print $4}' | sed 's/iops=\([0-9]*\).*/\1/')
MIXED_WRITE_IOPS=$(echo "$FIO_MIXED" | grep "WRITE:" | awk '{print $4}' | sed 's/iops=\([0-9]*\).*/\1/')
if [ -z "$MIXED_READ_MBPS" ]; then MIXED_READ_MBPS="0.00"; fi
if [ -z "$MIXED_WRITE_MBPS" ]; then MIXED_WRITE_MBPS="0.00"; fi
if [ -z "$MIXED_READ_IOPS" ]; then MIXED_READ_IOPS="0"; fi
if [ -z "$MIXED_WRITE_IOPS" ]; then MIXED_WRITE_IOPS="0"; fi
MIXED_READ_MBPS_FMT=$(printf "%.2f" "$MIXED_READ_MBPS")
MIXED_WRITE_MBPS_FMT=$(printf "%.2f" "$MIXED_WRITE_MBPS")
MIXED_READ_IOPS_FMT=$(printf "%'.f" "$MIXED_READ_IOPS")
MIXED_WRITE_IOPS_FMT=$(printf "%'.f" "$MIXED_WRITE_IOPS")
# Testdaten aufrΓ€umen
echo " β RΓ€ume Testdaten auf..."
rm -f /tmp/fio-testfile /tmp/fio-testfile-mixed
echo -e "\nπ Netzwerk Tests\n"
# Speedtest-CLI
echo " β Speedtest-CLI..."
SPEEDTEST=$(speedtest-cli --secure --json)
PING_SPEEDTEST=$(echo "$SPEEDTEST" | jq -r '.ping // 0')
DOWNLOAD_SPEEDTEST=$(echo "$SPEEDTEST" | jq -r '.download // 0')
UPLOAD_SPEEDTEST=$(echo "$SPEEDTEST" | jq -r '.upload // 0')
DL_MBPS_SPEEDTEST=$(printf "%.2f" "$(echo "$DOWNLOAD_SPEEDTEST / 1000000" | bc -l)")
UL_MBPS_SPEEDTEST=$(printf "%.2f" "$(echo "$UPLOAD_SPEEDTEST / 1000000" | bc -l)")
SPEEDTEST_SERVER=$(echo "$SPEEDTEST" | jq -r '.server.sponsor // "Unknown"')
SPEEDTEST_LOCATION=$(echo "$SPEEDTEST" | jq -r '.server.name // "Unknown"')
echo -e "\nπ€ Sende Ergebnisse an Discord...\n"
curl -s -H "Content-Type: application/json" \
-X POST -d @- "$WEBHOOK_URL" <<EOF
{
"embeds": [{
"title": "π VPS Benchmark abgeschlossen",
"color": 65280,
"fields": [
{ "name": "π₯οΈ Server", "value": "$SERVER_NAME", "inline": true },
{ "name": "π
Datum", "value": "$DATE", "inline": true },
{ "name": "π» OS", "value": "$OS_VERSION", "inline": true },
{ "name": "βββββββββ Hardware βββββββββ", "value": "** **", "inline": false },
{ "name": "π§ CPU", "value": "$CPU_MODEL", "inline": false },
{ "name": "πΎ RAM", "value": "${RAM_TOTAL_FMT} MB", "inline": true },
{ "name": "π SSD", "value": "$DISK_MODEL", "inline": true },
{ "name": "βββββββββ CPU Benchmarks βββββββββ", "value": "** **", "inline": false },
{ "name": "π§ Single-Core", "value": "$CPU_SINGLE_FMT Punkte", "inline": true },
{ "name": "π§ Multi-Core ($MULTI_THREADS Threads)", "value": "$CPU_MULTI_FMT Punkte", "inline": true },
{ "name": "βββββββββ RAM Benchmark βββββββββ", "value": "** **", "inline": false },
{ "name": "πΎ Throughput", "value": "$RAM_MBPS_FMT MiB/s", "inline": true },
{ "name": "πΎ Operations", "value": "$RAM_OPS_FMT Ops", "inline": true },
{ "name": "βββββββββ Disk Benchmarks (FIO) βββββββββ", "value": "** **", "inline": false },
{ "name": "π€ Sequential Write", "value": "$WRITE_MBPS_FMT MiB/s ($WRITE_IOPS_FMT IOPS)", "inline": true },
{ "name": "π₯ Sequential Read", "value": "$READ_MBPS_FMT MiB/s ($READ_IOPS_FMT IOPS)", "inline": true },
{ "name": "π Mixed (70R/30W)", "value": "Read: $MIXED_READ_MBPS_FMT MiB/s ($MIXED_READ_IOPS_FMT IOPS)\\nWrite: $MIXED_WRITE_MBPS_FMT MiB/s ($MIXED_WRITE_IOPS_FMT IOPS)", "inline": false },
{ "name": "βββββββββ Netzwerk Tests βββββββββ", "value": "** **", "inline": false },
{ "name": "π Speedtest-CLI", "value": "**Server:** $SPEEDTEST_SERVER ($SPEEDTEST_LOCATION)\\n**Ping:** ${PING_SPEEDTEST} ms\\n**Download:** ${DL_MBPS_SPEEDTEST} Mbit/s\\n**Upload:** ${UL_MBPS_SPEEDTEST} Mbit/s", "inline": false }
],
"footer": { "text": "π₯οΈ $HOSTNAME β’ Benchmark v2.0" },
"timestamp": "$(date -u +%Y-%m-%dT%H:%M:%S.000Z)"
}]
}
EOF
echo -e "β
Benchmark abgeschlossen fΓΌr $SERVER_NAME ($HOSTNAME)\n"
echo "βββββββββββββββββββββββββββββββββββββββββ"
echo "β BENCHMARK ERGEBNISSE β"
echo "βββββββββββββββββββββββββββββββββββββββββ"
echo ""
echo "π§ CPU:"
echo " Single-Core: $CPU_SINGLE_FMT Punkte"
echo " Multi-Core: $CPU_MULTI_FMT Punkte ($MULTI_THREADS Threads)"
echo ""
echo "πΎ RAM:"
echo " Throughput: $RAM_MBPS_FMT MiB/s"
echo " Operations: $RAM_OPS_FMT Ops"
echo ""
echo "π½ Disk (FIO):"
echo " Seq. Write: $WRITE_MBPS_FMT MiB/s ($WRITE_IOPS_FMT IOPS)"
echo " Seq. Read: $READ_MBPS_FMT MiB/s ($READ_IOPS_FMT IOPS)"
echo " Mixed 70R/30W:"
echo " β Read: $MIXED_READ_MBPS_FMT MiB/s ($MIXED_READ_IOPS_FMT IOPS)"
echo " β Write: $MIXED_WRITE_MBPS_FMT MiB/s ($MIXED_WRITE_IOPS_FMT IOPS)"
echo ""
echo "π Netzwerk:"
echo " Speedtest-CLI:"
echo " β Server: $SPEEDTEST_SERVER ($SPEEDTEST_LOCATION)"
echo " β Ping: ${PING_SPEEDTEST} ms"
echo " β Download: ${DL_MBPS_SPEEDTEST} Mbit/s"
echo " β Upload: ${UL_MBPS_SPEEDTEST} Mbit/s"
echo ""
echo "π» System:"
echo " CPU: $CPU_MODEL"
echo " RAM: ${RAM_TOTAL_FMT} MB"
echo " SSD: $DISK_MODEL"
echo " OS: $OS_VERSION"
echo ""
echo "βββββββββββββββββββββββββββββββββββββββββ"