如果我想要一个多线程进程(所有线程),我应该怎么做?
我知道可以做strace -f跟随分叉进程吗?但是当我开始打算时,如何附加到已经是多线程的进程呢?是一种告诉strace跟踪属于该进程的所有线程的所有系统调用的方法吗?
如果我想在java中将字符串转换为int,你知道我是否有办法检测溢出?我的意思是字符串文字实际上代表一个大于MAX_INT的值?
Java文档没有提到它..它只是说,如果字符串不能被解析为整数,它会通过出现FormatException没有提到关于溢出字..
我想使用pylab绘制散点图,但是,我的一些数据是NaN这样的:
a = [1, 2, 3]
b = [1, 2, None]
Run Code Online (Sandbox Code Playgroud)
pylab.scatter(a,b) 不起作用.
有没有什么方法可以在不显示这些NaN价值的情况下绘制实际价值点?
我需要维护一个大的有向图G,可能有数百万个节点和边.可能它可能不适合记忆.
我需要在此图表上执行的一些常见操作包括:
每个节点/边将具有与之关联的用户定义属性,例如访问计数,权重等.
对于每个节点(顶点),我将需要根据属性值执行有效的查询.例如,找到X值大于v1但小于v2的节点.这可能需要在某些字段上构建索引.
我需要找到给定节点的所有传入边和传出边,并更新边的权重.
我将需要从给定节点进行本地(基于DFS)遍历,并返回满足某个用户定义谓词的所有路径(此谓词可以使用路径中节点/边的属性值).
我需要有效地添加/删除节点/边缘.但是,这并不像操作1,2,3那样频繁地执行.
图中可能存在一些比其他部分更频繁访问的热点,我想将这些热点缓存在内存中.
以最少的实施努力实现这一目标的有效方法是什么?
我正在看一些基于磁盘的图形数据库,例如Neo4j/InfiniteGraph/DEX.尽管它们支持上述所有操作,但由于我不需要它们提供的许多功能,例如一致性/并发控制或基于群集的复制,因此它似乎是一种矫枉过正.此外,它们中的很多都基于Java,我更喜欢使用C/C++接口.
基本上我只需要一个磁盘上的图形库,它可以有效地处理持久性,节点查询和本地遍历.您对我可以使用的现有(开源)项目有什么建议吗?如果没有,实施这样的事情的最佳方式是什么?
graph social-networking neo4j graph-databases data-structures
我有一个错误的内核模块,我试图修复.基本上,当此模块运行时,它将导致其他任务挂起超过120秒.由于几乎所有挂起的任务都在等待mm-> mmap_sem或某些文件系统锁(i_node-> i_mutex)我怀疑它与此模块有关并不能获取mmap_sem锁和某些文件系统级别按顺序锁定(如inote-> i_mutex),这可能会导致一些死锁问题.由于我的模块不会尝试直接获取这些锁,我认为这是我调用的一些函数来抓住这些锁.现在我想弄清楚我的模块中哪些函数调用导致问题.
但是,由于以下原因,我很难调试它:
我不确切知道挂起的任务试图抓住哪个锁.我得到了挂起任务的调用跟踪,并知道它挂起的位置.内核还给了我一些信息,例如:"automount/3115:0 :(&type-> i_mutex_dir_key#2){ - ..},在:[] real_lookup + 0x24/0xc5".但是,我想确切地知道任务保持哪个锁,以及它为了找出问题而确切地想要获取哪个锁.由于内核不提供函数调用的参数以及调用跟踪,因此我发现很难获得这些信息.
我正在使用gdb和vmware来调试它,这允许我设置断点,步入函数等.但是,由于哪个任务以及该任务将在什么时候挂起是一种不确定的,我真的不知道在哪里设置断点和检查.如果我能以某种方式"附加"到内核报告被阻止超过120秒的任务,并得到一些有关它的信息,那将是很棒的.
所以我的问题如下:
我可以在哪里获得调用跟踪中调用跟踪中函数的参数,以便确切地确定任务正在尝试抓取哪个锁.
我是否可以使用gdb以某种方式"附加"到内核中的挂起任务?如果没有,我是否有办法至少检查代表该任务的数据结构?因为我很难检查内核中的所有全局数据结构.GDB总是抱怨"无法访问内存0x3200"或类似的东西.
如果我可以打印出内核中的每个任务,它们当前持有什么锁,这也将非常有用.有办法吗?
非常感谢你!
有一个套接字,HttpURLConnection在内部使用该套接字发送数据。我知道它现在可以从外部看到,但是我想知道是否有任何解决方法,以便我可以访问此套接字(而无需更改HttpURLConnection的实现)?我需要这个技巧来做一些检测。
非常感谢。
我正在尝试优化c ++程序的性能并减少其运行时间.但是,我无法弄清楚瓶颈在哪里.
time命令显示程序本身需要大约5分钟才能运行,大约5分钟,用户cpu时间需要4.5分钟.
CPU分析器(gcc profiler和google perftool)显示函数调用在CPU时间中总共需要60秒.我还尝试使用分析器来实时采样而不是cpu时间,它给了我类似的结果.
I/O探查器(我使用过ioapps)也表明I/O只需要大约30秒的程序运行时间.
所以基本上我有3.5分钟(程序运行时间的最大部分)下落不明,我相信这就是瓶颈所在.
我错过了什么,如何知道那个时间到了哪里?
我在我的后端java代码中有以下枚举:
public static enum CountryCodes implements EnumConstant {
USA, CAN, AUS;}
Run Code Online (Sandbox Code Playgroud)
在jsp中我试图遍历枚举值并进行比较:
<c:set var="countryCodes" value="<%=RequestConstants.CountryCodes.values()%>" />
<td><select>
<c:forEach items="${countryCodes}" var="countryCode">
<c:choose>
<c:when test="${CURRENT_INSTITUTION.countryCode == countryCode}">
<option value="${countryCode}" selected="selected">${countryCode}</option>
</c:when>
<c:otherwise>
<option value="${countryCode}">${countryCode}</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select></td>
Run Code Online (Sandbox Code Playgroud)
但问题是,CURRENT_INSTITUTION.countryCode从数据库中读取并且可能不是枚举值之一.
如果CURRENT_INSTITUTION.countryCode是枚举值以外的值(比方说CHN),则比较会抛出以下异常:
java.lang.IllegalArgumentException:没有定义枚举const CountryCodes.CHN.
我必须应对这种情况,因为数据库存储旧数据,这些数据未经过完整性检查,可能包含无效值.
那么有没有一种比较方法只是在CURRENT_INSTITUTION.countryCode不是枚举值之一时返回false ?或者有没有办法确定是否CURRENT_INSTITUION.countryCode是枚举值之一,以便我可以基于此采取适当的行动?
我如何在Linux shell中工作,以便即使启动它的shell终止,这个工作仍然会持续存在?
更具体地说,我试图在一个进程上运行strace.如果我在终端上运行,它会完美运行.但是,我想在一个远程shell中执行它,它将在所有命令执行后立即停止."strace -p pid &"没有任何效果,因为当shell停止时,后台作业也会被杀死.
我该怎么办?
nohup似乎是我要找的东西.但是,ssh user@remote_machine script_name似乎也没有任何影响.在我的脚本中"nohup strace -p pid"
非常感谢!
以下C++代码会产生编译错误.
编译器(gcc 5.2.0)抱怨在第15行它找不到匹配函数来调用'Derived :: test_func()'; 但是如果test_func()从Base移到Derived,它编译时没有错误.
class Base {
public:
int test_func();
};
class Derived : public Base {
public:
template <typename T>
int test_func(T t);
};
template <typename T>
int Derived::test_func(T t)
{
test_func(); // line 15
return 0;
}
int Base::test_func()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果模板函数使用不同的名称(与模板函数名称不同)调用Base类中的其他函数,如下面的代码所示,它也可以编译.
class Base {
public:
int test_func_diff_name();
};
class Derived : public Base {
public:
template <typename T>
int test_func(T t);
};
template <typename T>
int Derived::test_func(T t)
{
test_func_diff_name();
return 0;
} …Run Code Online (Sandbox Code Playgroud)