我正在运行FreeBSD 9.2p13和带有UFS和日志的软journaled。
有人知道如何在UFS上调整软日志吗?
手册、手册页或sysctl描述中没有合适的信息。
谢谢您给我的任何建议或观点,我可以阅读更多关于UFS日志的软日期调优。
我的问题是:
我有一些脚本,解析数据,并将其存储在sophia db中。
当许多小的写入发生时,有时文件系统会出现楔形,但是磁盘负载,我可以看到gstat、systat、vmstat等并不表示磁盘或任何其他过载。
在邮件中,我只能看到以下内容:
kernel: softdep: Out of journal space!当我试图找出原因时,我看到了dirhash和vnodes的正常情况。
sysctl -a | grep dirh
vfs.ufs.dirhash_reclaimage: 5
vfs.ufs.dirhash_lowmemcount: 2795
vfs.ufs.dirhash_docheck: 0
vfs.ufs.dirhash_mem: 141044
vfs.ufs.dirhash_maxmem: 27111424
vfs.ufs.dirhash_minsize: 2560
sysctl -a | grep vnodes
kern.maxvnodes: 1223926
kern.minvnodes: 305981
vfs.freevnodes: 305981
vfs.wantfreevnodes: 305981
vfs.numvnodes: 389262 当我试图将ls运行到冻结的文件系统终端时,桁架ls中的最后字符串显示:
...
lstat("work",{ mode=drwxr-xr-x
,inode=69662209,size=1024,blksize=32768 }) = 0 (0x0)
getdirentries(0x4,0x80100b000,0x1000,0x8010d9068,0xc94a8,0x0) = 0 (0x0)
lseek(4,0x0,SEEK_SET) = 0 (0x0) 也许这将是一个重要的信息,但是sysctl中没有描述:
debug.softdep.jwait_newblk: 104971
debug.softdep.jwait_inode: 16966
debug.softdep.jwait_freeblks: 0
debug.softdep.jwait_filepage: 736
debug.softdep.journal_wait: 122673
debug.softdep.journal_min: 1
debug.softdep.journal_low: 85056 感谢@Kondibas为您解答有关金枪鱼的问题!
感谢弗拉德给我指明了正确的道路:)
当我查看源代码/sys/ufs/ffs/ffs_softdep.c时,我发现对我的问题仍然有答案。
这使我注意到在系统日志中发生消息时的情况:
/*
* Verify some free journal space. softdep_prealloc() should
* guarantee that we don't run out so this is indicative of
* a problem with the flow control. Try to recover
* gracefully in any event.
*/
while (jblocks->jb_free == 0) {
if (flags != MNT_WAIT)
break;
printf("softdep: Out of journal space!\n");
softdep_speedup();
msleep(jblocks, &lk, PRIBIO, "jblocks", hz);
}在这里,我可以看到sysctl参数来监视日志的情况:
static int stat_journal_low; /* Times hit journal low threshold */
static int stat_journal_wait; /* Times blocked in jwait(). */我可以在sysctl中看到以下参数:
sysctl debug.softdep.journal_wait
sysctl debug.softdep.journal_low在这里,我可以看到一些可调的参数,软的行为受以下因素的影响:
softdep_initialize()
{
int i;
LIST_INIT(&mkdirlisthd);
max_softdeps = desiredvnodes * 4;
pagedep_hashtbl = hashinit(desiredvnodes / 5, M_PAGEDEP, &pagedep_hash);
inodedep_hashtbl = hashinit(desiredvnodes, M_INODEDEP, &inodedep_hash);
newblk_hashtbl = hashinit(desiredvnodes / 5, M_NEWBLK, &newblk_hash);
bmsafemap_hashtbl = hashinit(1024, M_BMSAFEMAP, &bmsafemap_hash);发布于 2014-12-15 12:12:15
tunefs有一个选项-S
-S size
Specify the softdep journal size in bytes. The minimum is 4M.对于FS来说,默认值似乎太小了。您必须对分区进行fsck,然后使用tunefs -j disable /dev/da0p0x禁用日志记录,然后用更大的日志tunefs -j enable -S 134217728 /dev/da0p0x重新启用日志记录。
https://serverfault.com/questions/652647
复制相似问题