我有一个ebox 3350mx它充当无头家庭服务器,提供各种本地服务,如 dnsmasq、atalkd、时间机器备份、http、ssh 等。
我安装了 FreeBSD 9.0。主硬盘 (ada0) 是外置 SD 卡。规格如下512 MB 内存和PMX-1000/Vortex86MX 处理器,频率 1Ghz。
问题是慢的操作时。我做了一些修改,让它“运行”得更快,但巨大的痛苦缺少流畅的 shell 提示。
列出目录、用 vim 编辑文件、用 cat 读取文件等任务已经变得非常烦人。
我正在尝试弄清楚发生了什么。更糟糕的是,由于 ISP 的电缆问题,我目前无法上网,他们似乎明天就会解决这个问题。
我设法通过停止“sendmail”来提高速度:我的可用内存从仅仅 12 MB 增加到了 480 MB。显然 sendmail 的行为很奇怪,导致机器运行缓慢。
我关闭了 PAM 和 useDNS sshd_config
,并停止了几乎所有服务。甚至 pflogd 和 pf。除了 sendmail 和 sshd_config 之外,它们中的大多数都产生了微小但可察觉的差异。但是,我的登录提示仍然像坏了的汽车一样运行。第一次发出“uptime”时,我得到了正常的响应,第二次发出命令时 -大约一秒后- 我需要等待 15 秒或按下“enter”键,屏幕上才会显示任何内容。有时按下“enter”键有效,就好像 tty 没有传送一样,有时甚至不起作用,就像 i/o 不起作用一样……但我根本没有收到任何 i/o 错误。
我有点绝望,因为我不知道从哪里开始寻找......在 FreeBSD 论坛上发帖如果您有兴趣的话,提供了一些 cmd 结果。
欢迎提出任何关于如何将 shell 的响应能力转变为“正常”的想法。
更新:
这是磁盘信息:
[user@comodino ~]$ dmesg |grep -i ada
ada0 at ata2 bus 0 scbus0 target 0 lun 0
ada0: <SD RDC SD-IDE HOST CONTROLLER 01000000> ATA-6 device
ada0: 33.300MB/s transfers (UDMA2, PIO 512bytes)
ada0: 15399MB (31537152 512 byte sectors: 16H 63S/T 31286C)
ada0: Previously was known as ad4
Trying to mount root from ufs:/dev/ada0p2 [rw]...
我也这么认为,这可能是一个 I/O。我的卡是 16 GB ADATA 10 级。
这是我的 iostat:
[user@comodino ~]$ iostat
tty ada0 pass0 cpu
tin tout KB/t tps MB/s KB/t tps MB/s us ni sy in id
0 1 24.03 0 0.00 0.00 0 0.00 0 0 0 0 100
我正在用 bonnie++ 做一些测试(http://www.coker.com.au/bonnie++/) 现在。我会尽快报告结果。感谢 Manoli 的回复 :-)
更新:以下是
[atma@comodino ~]$ bonnie++
Writing with putc()...done
Writing intelligently...done
Rewriting...done
Reading with getc()...done
Reading intelligently...done
start 'em...done...done...done...
Create files in sequential order...done.
Stat files in sequential order...done.
Delete files in sequential order...done.
Create files in random order...done.
Stat files in random order...done.
Delete files in random order...done.
Version 1.03e ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
comodino 1G 4156 24 4591 8 2993 7 14869 88 21277 27 100.8 2
------Sequential Create------ --------Random Create--------
-Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
16 2804 58 10449 98 6559 88 2997 61 10711 99 4418 58 comodino,1G,4156,24,4591,8,2993,7,14869,88,21277,27,100.8,2,16,2804,58,10449,98,6559,88,2997,61,10711,99,4418,58
现在我必须解码结果:-P
答案1
/var
和在哪里/tmp
?对于 SD 系统,我喜欢映射/tmp -> /var/tmp
并制作/var
RAM 磁盘。以下选项/etc/rc.conf
将在启动时自动设置 64MB /var
。您仍然需要删除/tmp
并使其成为符号链接。
# SD Card boot, RAM-Disk /var
varmfs="YES" # Set to YES to always create an mfs /var, NO to never
varsize="64m" # Size of mfs /var if created
varmfs_flags="" # Extra mount options for the mfs /var
populate_var="YES" # Set to YES to always (re)populate /var, NO to never
cleanvar_enable="NO" # Clean the /var directory
答案2
这可能不是 shell 响应能力的问题,而是磁盘吞吐量非常低。首先检查 dmesg,看看你的 SD 卡使用什么传输模式:
您正在寻找类似这样的内容:
ada0:ATA-8 SATA 2.x 设备 ada0:150.000MB/s 传输(SATA、UDMA5、PIO 8192 字节)
可能是 SD 卡或控制器太慢了,SD 卡的速度各不相同 - 称为速度等级。理想情况下,您应该为 OS 磁盘使用 6 级或更高的速度。
但是可以进行一些优化,例如禁用不必要的日志记录和文件修改时间(在 fstab 中的挂载选项中使用 noatime)。