小编u__*_*u__的帖子

setrlimit失败,在valgrind下运行时不允许操作

我可能会遗漏某些东西或者可能没有,但是setrlimit当在valgrind下运行时,函数会一直失败

int main()
{
        const struct rlimit file_limits = { .rlim_cur = 65536, .rlim_max = 65536 };
        if ( setrlimit( RLIMIT_NOFILE, &file_limits ) )
        {
                printf(" Failed  %d", errno );
                perror(" More " );
        }
        else
        {
                printf(" Success ");
        }
        printf("\n");
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下是样本运行

正常运行

sh-4.2# ulimit -H -n
800000
sh-4.2# ulimit -S -n
500000
sh-4.2# ./rlimit
 Success
sh-4.2#
Run Code Online (Sandbox Code Playgroud)

在valgrind

sh-4.2#
sh-4.2# valgrind ./rlimit
==28974== Memcheck, a memory error detector
==28974== Copyright (C) 2002-2015, and GNU …
Run Code Online (Sandbox Code Playgroud)

c linux valgrind centos

14
推荐指数
1
解决办法
1878
查看次数

建议在JavaFX文本字段中限制输入的方法

这似乎问题是重复.但我的问题是我已经通过两种方式在JavaFX中开发了一个整数文本字段.代码如下

public class FXNDigitsField extends TextField
{
private long m_digit;
public FXNDigitsField()
{
    super();
}
public FXNDigitsField(long number)
{
    super();
    this.m_digit = number;
    onInitialization();
}

private void onInitialization()
{
    setText(Long.toString(this.m_digit));
}

@Override
public void replaceText(int startIndex, int endIndex, String text)
{
    if (text.matches(Constants.DIGITS_PATTERN) || text.equals(Constants.EMPTY_STRING)) {
        super.replaceText(startIndex, endIndex, text);
    }
}

@Override
public void replaceSelection(String text)
{
    if (text.matches(Constants.DIGITS_PATTERN) || text.equals(Constants.EMPTY_STRING)) {
        super.replaceSelection(text);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

第二种方法是添加一个事件Filter.

给出了代码片段.

 // restrict key input to numerals.
this.addEventFilter(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() { …
Run Code Online (Sandbox Code Playgroud)

javafx input textfield

9
推荐指数
3
解决办法
2万
查看次数

pthread_create因EAGAIN而失败

考虑这里的代码片段,我试图创建一堆线程,最终处理模拟竞争条件的给定任务.

const int thread_count = 128;
pthread_t threads[thread_count];

for (int n = 0; n != thread_count; ++n)
{
    ret = pthread_create(&threads[n], 0, test_thread_fun, &test_thread_args);
    if( ret != 0 )
    {
        fprintf( stdout, "Fail %d %d", ret, errno );
        exit(0);
     }
 }
Run Code Online (Sandbox Code Playgroud)

事情通常很好,除了偶尔pthread_create失败与errno EAGAIN"资源暂时不可用",我尝试诱导usleep,并重试创建但没有实际效果.

失败是零星的,在某些方面没有失败,有些则经常发生.

任何想法这里可能出错?

编辑 - 1

更新max-threads

cat /proc/sys/kernel/threads-max
256467
Run Code Online (Sandbox Code Playgroud)

编辑2

我认为这里的输入让我思考,我可能会在下面做,并发布任何值得分享的结果.

  1. 将堆栈大小设置为最小值,我认为thread_function不使用任何大型数组.
  2. 增加我的记忆力和交换(并消除任何副作用)
  3. 编写一个脚本来监视系统行为,并在运行此案例时看到任何其他进程/系统守护程序正在干扰,这反过来会导致资源紧缩.
  4. 系统的硬和软限制相当高,所以我会留下他们在这一点.

c linux pthreads

6
推荐指数
1
解决办法
3823
查看次数

填满磁盘空间的最快方法是什么

我有一个价值几 TB ( 5 TBs)的大磁盘,我需要将这个磁盘空间填满大约95%,这是一个linux centos盒子。

我试过 dd

dd if=/dev/zero of=o_File1.img bs=209715200 count=1000
Run Code Online (Sandbox Code Playgroud)

甚至尝试像这样循环运行

#!/bin/bash

count_=0
parallel_=10

BS=2097152000
COUNT=100
while [ $count_ -lt $parallel_ ]
do
        file="Dummy_DD_BS_"$BS"_$(date +%Y%M%d%H%m%s)_$count_.img"
        echo $file
        `dd if=/dev/zero of=$file bs=$BS count=$COUNT > /dev/null 2>&1 &`
        count_=$((count_+1))
done
Run Code Online (Sandbox Code Playgroud)

但是 5 TB 似乎很多。

有没有更快的方法,我可以使用任何脚本 python/perl/bash 或任何东西,我正在寻找一个快速优化的解决方案

编辑:

好的,所以遵循在linux 系统上快速创建大文件 并没有真正解决任何问题

情况1 : dd

 time dd if=/dev/zero of=filename10 bs=1G count=10
    10+0 records in
    10+0 records out
    10737418240 bytes (11 GB) copied, 34.0468 s, …
Run Code Online (Sandbox Code Playgroud)

python linux bash shell perl

2
推荐指数
1
解决办法
2612
查看次数

标签 统计

linux ×3

c ×2

bash ×1

centos ×1

input ×1

javafx ×1

perl ×1

pthreads ×1

python ×1

shell ×1

textfield ×1

valgrind ×1