小编Sam*_*erg的帖子

Log4j AsyncAppender

我们有一个使用log4j的高速,大容量应用程序.通常我们一直在使用SyslogAppender,认为它是最轻的,最快的追加器.但是我们看到SYSLOG在高容量下的CPU利用率很高(因为SYSLOG conf中的过滤规则).

我们可能想切换到使用FileAppender.问题是我们是否希望将此与log4j AsyncAppender结合使用以消除由于刷新(强制)到磁盘而导致的任何暂停?

(该应用程序对延迟非常敏感,因此我们希望最小化appender可能添加的任何延迟.)另外 - 我不确定SyslogAppender是否真的比FileAppender更快(无论如何(但这是我开始以来的事情).

对此的任何想法将不胜感激.

java log4j low-latency

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

Java 7 JVM比JRockit 6慢?

我对升级到Java 7非常感兴趣(出于我自己编码的原因).但是,我们的用户对延迟非常敏感(一切都需要亚毫秒级).我在3个不同的JVM之间进行了简单的性能比较测试,发现Java 7要慢得多.测试通过我们的应用推送了一些简单的消息.此测试是一种低负载,负载量测试,每隔几秒就会推送一条消息.结果是(以微秒为单位):

 - Hotspot 6 (build 24): msgs= 23 avg= 902 
 - JRockit 6 (R28 b 29): msgs= 23 avg= 481 
 - Hotspot 7 (build 04): msgs= 34 avg=1130
Run Code Online (Sandbox Code Playgroud)

Oracle的策略是从Java 7开始合并JRockit和Hotspot(因此JRockit 6是最后一个可用的).有没有人有任何想法为什么表现更糟糕?(需要注意的一点是,代码是在Java 1.6下编译的.不确定是否可以解释它......)

更新:我投票结束了我自己的问题,因为我可以从评论中看到,我无法真正传达足够的信息,使其成为一个建设性的问题.感谢所有评论的人.

更新:更多反馈后,我想我会提供更多信息.测试总是在重新开始之后.每个测试的所有因素都相同.唯一改变的是JVM.多次重复测试可得到一致的结果.在任何测试迭代中都没有发生GC.

下面是其中一个测试运行的图表值.对于JRockit和Hotspot 7,第一个延迟值被抛弃了.JRockit具有巨大的第一价值,但随后很快就会优化并稳定下来.Hotspot 7需要更长时间才能进行优化,并且永远不会降至JRockit的平均值.每个数据点表示从TCP/IP套接字读取消息,运行业务逻辑以及在另一个套接字上写入消息的微秒.每条消息都是相同的,并且没有为任何消息输入新的代码路径.

JRockit 6 vs. Hotspot 7

java performance jrockit

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

两个表都包含NULL时如何JOIN ON

我正在2列上进行2个表的外连接.如果table1.column1 = table2.column1和table1.column2 = table2.column2,则应该进行连接.由于允许column2包含null,因此只要值为null,连接就会失败,因为null不等于null(只有计算机科学家才会喜欢).

我想出的解决方法是:

select table1.column1,table1.colunn1,table2.column1,table2.column2 from 
table1 
left join table2 
       on table1.column1=table2.column1 
       and if(table1.column2 is null,table2.column2 is null, table1.column2=table2.column2)
Run Code Online (Sandbox Code Playgroud)

这工作正常,但必须有更好的方法吗?

mysql sql null join

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

如何从元组(或2的列表)更新字典

我认为可以按如下方式更新现有字典:

nameValuePair = 'myKey=myValue'
d.update(nameValuePair.split('='))
Run Code Online (Sandbox Code Playgroud)

但是我收到此错误:

Traceback (most recent call last):
  File "<pyshell#98>", line 1, in <module>
    d2.update(item.split('='))
ValueError: dictionary update sequence element #0 has length 1; 2 is required
Run Code Online (Sandbox Code Playgroud)

我查看了关于这个主题的其他一些StackOverflow问题/答案,这让我觉得这是可能的.我必须遗漏一些基本的东西......

python dictionary

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

Linux g ++编译错误:错误:在'||'之前预期','或'...' 代币

首先让我说这在Visual Studio中编译并运行良好.但是当我在Linux(g ++)上编译相同的文件时,我得到编译错误,用于声明和实现<<运算符的重载.

代码的相关部分在下面提取.(它是一个带有Google测试用例的.cpp文件,并且通过了类和方法定义来支持测试用例.)我除了代码的相关部分之外的所有部分(我希望).

class orderrequest : public msg_adapter {
public:
    // ... snip

    friend bool operator ==(const orderrequest &or1, const orderrequest &or2);
    friend ostream& operator <<(ostream &out, const orderrequest &or);  // compiler error here
};

bool operator ==(const orderrequest &or1, const orderrequest &or2) {
    bool result = or1.symbol == or2.symbol
        && or1.orderQty == or2.orderQty;

    // ...  snip
    return result;

}

// compiler error here
ostream& operator <<(ostream &out, const orderrequest &or) {

    out << "symbol=" << or.symbol …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors g++

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

什么是Eclipse的声明视图用于?

我们有一些带有冗余代码的类文件.我一直在寻找Eclipse中的一个视图,它允许你将编辑器限制为一个方法,类似于VB6中的Module View按钮,对于那些知道我的意思的人.对此的需求是使搜索字符串变得更容易,并且搜索仅限于我关心的方法中的代码.(这也是编辑大量代码的一个很好的功能,以确保我不会意外地将代码添加到具有冗余代码的不同大型方法中.)

我认为声明视图会这样做,但这个视图既不允许搜索也不编辑.这导致了一个由两部分组成的问题:

一个.这可以在Eclipse中使用如上所述的任何视图吗?

湾 鉴于宣言视图的局限性,它有什么用处?(我直接发现的唯一链接声明View Hands On Eclipse对我来说没有多大意义.)

java eclipse

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

C++:建议的方法是区分从未拥有值集的字符串和空字符串?

我们有一个Java消息传递API,我们正在转换为C++.消息通常具有简单的数据类型,如string,int,double等.构造消息时,我们将所有成员变量初始化为默认值,API将其识别为"null"值(即从不设置为任何值),例如Integer.MAX_VALUE对于int类型.任何被视为null的字段都不会被序列化并发送.

在Java中,字符串会自动初始化,null因此很容易区分为null的字符串字段与空字符串的字符串(这是在消息中发送的合法值).

我不确定在C++中处理此问题的最佳方法,因为字符串会自动初始化为空字符串,而空字符串是通过API发送的合法值.我们可以将字符串默认为某个控制字符(这在我们的API中不合法),但我想知道是否有更常规或更好的方法来执行此操作.

我们都是C++的新手,所以我们可能忽略了一些明显的方法.

c++ string

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

g ++似乎无法推断数据类型,除非在单独的行上声明(与Visual C++不同)?

我遇到了一些问题,因为我在Windows上使用Visual C++进行开发,然后使用g ++在Linux上进行编译.我遇到的一件事我不明白,如果你将对构造函数的引用传递给函数,g ++似乎无法匹配传递给函数的数据类型.具体来说,给定一个像这样的方法签名:

static int to_int(string& value);
Run Code Online (Sandbox Code Playgroud)

如果它被调用如下:

int id_number = EZXMsg::to_int(string(tokens[index]));
Run Code Online (Sandbox Code Playgroud)

(令牌类型是a vector<char*>& tokens)

g ++给出错误:

main.cpp:130:错误:没有匹配函数调用'ezx :: iserver :: EZXMsg :: to_int(std :: string)'../iserver-api/ezxmsg.h:50:注意:候选人是: static int ezx :: iserver :: EZXMsg :: to_int(std :: string&)

虽然Visual C++没有编译问题.要为g ++修复它,代码需要像这样:

string value(tokens[index]);
int roid = EZXMsg::to_int(value);
Run Code Online (Sandbox Code Playgroud)

g ++需要额外线路的原因是什么?

c++ g++

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

分发Windows C++库:如何决定是创建静态库还是动态库?

我们一直在将 Java 和 .NET API 库转换为 C++,并试图找出将编译版本分发给其他开发人员以与他们的自定义应用程序一起使用的最佳方法。应该是静态库还是动态库?

我们需要为 Win32 和 Win64 创建(我想每个目标操作系统都有调试版本和发布版本)。考虑到我在尝试确保所有引用的库都匹配(/MT 与 /MD)时遇到的所有挫败感,我想知道是否需要在这里做出一个决定来简化其他开发人员的工作。

当我dumpbin /all <static library file name> | find /i "msvc在静态库上运行时,我看不到任何运行时引用(与在 .exe 或 .dll 上执行相同操作时不同)。这是否表明运行时尚未链接,并且这使开发人员在开发和构建自己的应用程序时可以更灵活地创建 /MT 或 /MD?

哪种方法可以让开发人员的生活更轻松?

c++ shared-libraries static-libraries

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

有没有一种简单的方法可以通过线程转储来查找线程死锁的原因?

我们在生产中有一个 C# 控制台应用程序,它具有间歇性线程死锁。我试图通过将 VS 2017 附加到正在运行的进程来查找死锁,但是我找不到任何方法可以轻松找到死锁的原因。似乎没有任何窗口可以识别哪些线程拥有哪些锁。(我尝试使用内存窗口,但这根本不起作用)。

我也尝试过使用转储文件,但发现很难理解它显示的内容。(但这是在我知道我正在寻找僵局之前。)

我习惯于在 Java 中使用 JStack,这是一个命令行实用程序,用于针对正在运行的 Java 应用程序运行,它打印线程转储并识别死锁,并在每个 StackTrace 中显示线程锁定监视器的点。

.NET 是否有一些等效的工具?

.net c# multithreading deadlock

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