小编isa*_*zan的帖子

Kinesis分区键始终位于同一个分片中

我有一个带有2个分片的kinesis流,如下所示:

{
    "StreamDescription": {
        "StreamStatus": "ACTIVE",
        "StreamName": "my-stream",
        "Shards": [
            {
                "ShardId": "shardId-000000000001",
                "HashKeyRange": {
                    "EndingHashKey": "17014118346046923173168730371587",
                    "StartingHashKey": "0"
                },
            {
                "ShardId": "shardId-000000000002",
                "HashKeyRange": {
                    "EndingHashKey": "340282366920938463463374607431768211455",
                    "StartingHashKey": "17014118346046923173168730371588"
                },
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

发送方设置通常为UUID的分区.它总是落在shard-002之上,这使得系统不能进行负载平衡,因此无法扩展.

作为旁注,kinesis使用md5sum分配记录,然后将其发送到包含其范围内的结果哈希的分片.事实上,当我在我使用的UUId上测试它时,它们总是落在同一个碎片中.

echo -n 80f6302fca1e48e590b09af84f3150d3 | md5sum
4527063413b015ade5c01d88595eec11  

17014118346046923173168730371588 < 4527063413b015ade5c01d88595eec11 < 340282366920938463463374607431768211455
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何想法?

amazon-kinesis

4
推荐指数
2
解决办法
2543
查看次数

libc 和未定义的符号:stime

我有一个使用 FTDI 驱动程序库的 python 应用程序,名为:

/usr/local/lib64/libftd2xx.so.1.4.22
Run Code Online (Sandbox Code Playgroud)

当我使用 libc 2.27 运行该应用程序时,它工作正常。

当针对 libc 2.32 运行它时,它会失败并显示以下内容:

/usr/local/lib64/libftd2xx.so: undefined symbol: stime
Run Code Online (Sandbox Code Playgroud)

在查看 libc 版本时,确实有一些与 libc 2.31 中的 stime 相关的内容,如下所述: https: //lwn.net/Articles/811315/

它说:

“过时的函数 stime 不再可用于新链接的二进制文件,并且其声明已从 <time.h> 中删除。”

我对此的理解是,只有“新代码”无法编译/链接此函数,但使用此函数的现有库应该仍然可以工作。

事实上,如果我在 2.27 和 2.32 中查找 stime 符号,大致使用以下命令,我会发现 stime 就在那里:

2.27

root@PPL23:~# nm --demangle --dynamic --defined-only --extern-only /lib/x86_64-linux-gnu/libc-2.27.so* | grep stime
00000000000d5ee0 T stime
Run Code Online (Sandbox Code Playgroud)

2.32

localhost /tmp #  nm --demangle --dynamic --defined-only --extern-only /lib64/libc-2.32.so | grep stime
000000000012e490 T stime@GLIBC_2.2.5
Run Code Online (Sandbox Code Playgroud)

为什么 libc 2.32 不向后兼容现有的 FTDI 驱动程序?因为符号似乎在那里,所以即使在 …

glibc libc

4
推荐指数
1
解决办法
2437
查看次数

fsync vs write系统调用

我想问一个基本问题,即什么时候使用像fsync这样的系统调用是有用的.我是初学者,我总是认为写入足以写入文件,而使用write的样本实际上写入文件末尾.

那么像fsync这样的系统调用的目的是什么?

只是为了提供一些背景我正在使用Berkeley DB库版本5.1.19,并且有很多关于fsync()与编写的成本的讨论.这就是我想知道的原因.

filesystems berkeley-db

3
推荐指数
1
解决办法
2547
查看次数

将junit侦听器添加到SpringJUnit4ClassRunner

我有一个使用SpringJUnit4ClassRunner运行的单元测试,如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
public class TestService
{
     @Resource
     EmbeddedMysqlDatabase mysqlDB;

     ...
}
Run Code Online (Sandbox Code Playgroud)

我有一个嵌入式数据库,用于单元测试,我想在运行所有测试后关闭.我知道在单元测试中嵌入数据库不是通常的/良好实践,但在这种特殊情况下,这是非常有用的.

@AfterClass不是一个选项,因为它必须是静态的,我的数据库实例是由spring注入的.静态成员不能注入.

我如何通过听众或任何其他方式做到这一点?

谢谢.

java junit spring unit-testing

3
推荐指数
1
解决办法
2009
查看次数

重定向后,Linux Screen实用程序不会回显到屏幕

我正在测试将PHP程序运行到屏幕的重定向。

脚本执行此操作:

<?php

for( $i=1; $i<=1000; $i++ )
{
        sleep(1);
        echo $i;
        echo "\n";
}
Run Code Online (Sandbox Code Playgroud)

我在上面运行:

screen -d -m bash -c 'php forlog.php >> ~/forlog.log 2>&1'
Run Code Online (Sandbox Code Playgroud)

重定向工作正常,但是当我连接到屏幕时,我没有输出(黑屏)。

无论如何,将输出重定向到文件和屏幕内?

PS:我不想使用nohup。同样,当不重定向时,输出也可以在屏幕上看到。

php bash shell

3
推荐指数
1
解决办法
39
查看次数

Linux文件描述符

我有一个Java程序,平均运行2周后会卡住并产生以下错误:

Caused by: java.net.SocketException: Too many open files
        at sun.nio.ch.Net.socket0(Native Method)
        at sun.nio.ch.Net.socket(Net.java:415)
        at sun.nio.ch.Net.socket(Net.java:408)
        at sun.nio.ch.SocketChannelImpl.<init>(SocketChannelImpl.java:105)
Run Code Online (Sandbox Code Playgroud)

这告诉我许多插座已打开但从未关闭.在深入研究程序设备之前,我开始检查我可以从linux本身获取哪些信息.我正在使用Redhat.

然后,提出了几个问题如下:

  1. 为什么以下命令不能提供相同的输出?

看到

[ec2-user@ip-172-22-28-102 ~]$ sudo ls /proc/32085/fd | wc -l
592
[ec2-user@ip-172-22-28-102 ~]$ sudo lsof -a -p 32085 | wc -l 
655
Run Code Online (Sandbox Code Playgroud)
  1. 有没有办法从proc stat info知道哪个线程创建了哪个文件描述符?

似乎没有,因为如果我做以下,我得到相同的信息:

[ec2-user@ip-172-22-28-102 ~]$ sudo ls /proc/32085/task/22386/fd | wc -l
592
[ec2-user@ip-172-22-28-102 ~]$ sudo ls /proc/32085/fd | wc -l
592
Run Code Online (Sandbox Code Playgroud)

如果我直接从/ proc /下去线程,也一样.

谢谢

linux system

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

收益率返回和"并非所有代码路径返回值"

为什么以下代码:

private static IEnumerable<int> TestYield(bool check)
{
    if (check)
    {
        return 1;
    }
    else
    {
        Console.WriteLine("In the else");
    }
}
Run Code Online (Sandbox Code Playgroud)

产生错误,"并非所有代码路径都返回值".但是,以下代码不会产生相同的错误:

private static IEnumerable<int> TestYield(bool check)
{
    if (check)
    {
        yield return 1;
    }
    else
    {
        Console.WriteLine("In the else");
    }
}
Run Code Online (Sandbox Code Playgroud)

唯一的区别是产量.产生不同的产量不会导致同样的错误?

c# yield-return

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

将 iostat 输出重定向到文件

为什么 iostat 的输出没有重定向到以下命令中的文件:

iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization 
Run Code Online (Sandbox Code Playgroud)

iostat 的行为是否与任何其他命令不同?

提前谢谢

bash awk iostat

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

打印HttpServletRequest JSON内容

我正在开发一个Spring MVC应用程序.我写了一个mvc:拦截器来打印传入请求的JSON内容.我尝试了两种方法,但两种方法都不起作用.

使用getReader()的第一种方法不起作用,因为getReader()只能被调用一次,它似乎已被容器调用,因此建议使用ServletInputStream接口.我有以下代码:

public class RequestInterceptor implements HandlerInterceptor  {

private static final Logger logger = LoggerFactory.getLogger(RequestInterceptor.class);


@Override
public boolean preHandle(HttpServletRequest request,
        HttpServletResponse response, Object handler) throws Exception {

    logger.info("Received HTTP request with URL:" + request.getRequestURL());

    ServletInputStream in = request.getInputStream();
    byte[] buf = new byte[1000];
    StringBuilder sb = new StringBuilder();
    for (int nChunk = in.read(buf); nChunk!=-1; nChunk = in.read(buf))
    {
        sb.append(new String (buf,  0, nChunk));
    }

    logger.info("Request JSON Content" + sb.toString());


    return true;
}
...
}
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是,在它通过拦截器并进入弹簧控制器后,它没有输入,可能是因为我的函数已经读取了输入.

我收到以下日志消息:

INFO : com.feelstream.server.interceptors.RequestInterceptor …
Run Code Online (Sandbox Code Playgroud)

java spring json spring-mvc

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