首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UFS楔子:“走出期刊空间!”-怎么调?(FreeBSD)

UFS楔子:“走出期刊空间!”-怎么调?(FreeBSD)
EN

Server Fault用户
提问于 2014-12-15 11:53:32
回答 1查看 673关注 0票数 0

我正在运行FreeBSD 9.2p13和带有UFS和日志的软journaled。

有人知道如何在UFS上调整软日志吗?

手册、手册页或sysctl描述中没有合适的信息。

谢谢您给我的任何建议或观点,我可以阅读更多关于UFS日志的软日期调优。

我的问题是:

我有一些脚本,解析数据,并将其存储在sophia db中。

当许多小的写入发生时,有时文件系统会出现楔形,但是磁盘负载,我可以看到gstat、systat、vmstat等并不表示磁盘或任何其他过载。

在邮件中,我只能看到以下内容:

代码语言:javascript
复制
kernel: softdep: Out of journal space!

当我试图找出原因时,我看到了dirhash和vnodes的正常情况。

代码语言:javascript
复制
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中的最后字符串显示:

代码语言:javascript
复制
...
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中没有描述:

代码语言:javascript
复制
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时,我发现对我的问题仍然有答案。

这使我注意到在系统日志中发生消息时的情况:

代码语言:javascript
复制
            /*
             * 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参数来监视日志的情况:

代码语言:javascript
复制
static int stat_journal_low;    /* Times hit journal low threshold */
static int stat_journal_wait;   /* Times blocked in jwait(). */

我可以在sysctl中看到以下参数:

代码语言:javascript
复制
sysctl debug.softdep.journal_wait
sysctl debug.softdep.journal_low

在这里,我可以看到一些可调的参数,软的行为受以下因素的影响:

代码语言:javascript
复制
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);
EN

回答 1

Server Fault用户

回答已采纳

发布于 2014-12-15 12:12:15

tunefs有一个选项-S

代码语言:javascript
复制
-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重新启用日志记录。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/652647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档