我有一个带有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)
关于如何解决这个问题的任何想法?
我有一个使用 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 驱动程序?因为符号似乎在那里,所以即使在 …
我想问一个基本问题,即什么时候使用像fsync这样的系统调用是有用的.我是初学者,我总是认为写入足以写入文件,而使用write的样本实际上写入文件末尾.
那么像fsync这样的系统调用的目的是什么?
只是为了提供一些背景我正在使用Berkeley DB库版本5.1.19,并且有很多关于fsync()与编写的成本的讨论.这就是我想知道的原因.
我有一个使用SpringJUnit4ClassRunner运行的单元测试,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:aConfig.xml")
public class TestService
{
@Resource
EmbeddedMysqlDatabase mysqlDB;
...
}
Run Code Online (Sandbox Code Playgroud)
我有一个嵌入式数据库,用于单元测试,我想在运行所有测试后关闭.我知道在单元测试中嵌入数据库不是通常的/良好实践,但在这种特殊情况下,这是非常有用的.
@AfterClass不是一个选项,因为它必须是静态的,我的数据库实例是由spring注入的.静态成员不能注入.
我如何通过听众或任何其他方式做到这一点?
谢谢.
我正在测试将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。同样,当不重定向时,输出也可以在屏幕上看到。
我有一个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.
然后,提出了几个问题如下:
看到
[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)
似乎没有,因为如果我做以下,我得到相同的信息:
[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 /下去线程,也一样.
谢谢
为什么以下代码:
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)
唯一的区别是产量.产生不同的产量不会导致同样的错误?
为什么 iostat 的输出没有重定向到以下命令中的文件:
iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization
Run Code Online (Sandbox Code Playgroud)
iostat 的行为是否与任何其他命令不同?
提前谢谢
我正在开发一个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) bash ×2
java ×2
spring ×2
awk ×1
berkeley-db ×1
c# ×1
filesystems ×1
glibc ×1
iostat ×1
json ×1
junit ×1
libc ×1
linux ×1
php ×1
shell ×1
spring-mvc ×1
system ×1
unit-testing ×1
yield-return ×1