在树莓派 4B 上跑一个 PHP + MySQL 的程序,安装过程需要创建数据库并写入 demo 数据,更新数据库这一步总是遇到 504 Gateway Timeout 错误,一开始怀疑是脚本执行时间不够,将 max_execution_time
参数调整到 300,依然 504。后续又折腾了 Nginx 的 fastcgi
相关参数,依然没有解决。
fastcgi_connect_timeout 300s;
fastcgi_send_timeout 300s;
fastcgi_read_timeout 300s;
由于 iowait 值很高,于是开始怀疑是树莓派的 IO 性能问题,将 MySQL 的 datadir
从优盘移到了移动硬盘上,再次尝试,终于运行成功,没有了 504 错误。
接下来用 dd
测试一下树莓派上各种类型的存储的读写速度。先看一下硬盘情况,一个 TF 卡,一个优盘,一个移动硬盘,优盘移动硬盘均使用 USB 3.0 接口。
root@ubuntu:~# inxi -D
Drives: Local Storage: total: 509.86 GiB used: 460.63 GiB (90.3%)
ID-1: /dev/mmcblk0 model: SC16G size: 14.84 GiB
ID-2: /dev/sda type: USB vendor: Western Digital model: WD My Passport 0748 size: 465.73 GiB
ID-3: /dev/sdb type: USB model: aigo U385 size: 29.30 GiB
挂载情况:
root@ubuntu:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.7G 0 disk
└─sda1 8:1 0 465.7G 0 part /nas
sdb 8:16 1 29.3G 0 disk
└─sdb1 8:17 1 29.3G 0 part /data
测试写入速度:
root@ubuntu:/data# dd if=/dev/zero of=/data/test.db bs=8k count=50000 conv=fdatasync
50000+0 records in
50000+0 records out
409600000 bytes (410 MB, 391 MiB) copied, 39.2218 s, 10.4 MB/s
root@ubuntu:/data#
root@ubuntu:/data# dd if=/dev/zero of=/nas/test.db bs=8k count=50000 conv=fdatasync
50000+0 records in
50000+0 records out
409600000 bytes (410 MB, 391 MiB) copied, 10.0974 s, 40.6 MB/s
root@ubuntu:/data#
root@ubuntu:/data# dd if=/dev/zero of=/root/test.db bs=8k count=50000 conv=fdatasync
50000+0 records in
50000+0 records out
409600000 bytes (410 MB, 391 MiB) copied, 35.1674 s, 11.6 MB/s
可以看到移动硬盘是优盘的 4 倍。
测试读取速度:
root@ubuntu:~# dd if=/dev/sda1 of=/dev/null bs=8k count=50000
50000+0 records in
50000+0 records out
409600000 bytes (410 MB, 391 MiB) copied, 4.80488 s, 85.2 MB/s
root@ubuntu:~# dd if=/dev/sdb1 of=/dev/null bs=8k count=50000
50000+0 records in
50000+0 records out
409600000 bytes (410 MB, 391 MiB) copied, 5.14865 s, 79.6 MB/s
root@ubuntu:~# dd if=/dev/mmcblk0p2 of=/dev/null bs=8k count=50000
50000+0 records in
50000+0 records out
409600000 bytes (410 MB, 391 MiB) copied, 10.6999 s, 38.3 MB/s
可见优盘移动硬盘的读取速度没差多少, TF 卡的读取速度慢很多。
因此,运行需要写入的程序时,最好用移动硬盘来提升性能。PHP 程序目录,MySQL 数据目录,Docker 数据目录都应该放到移动硬盘里。
发表回复