我在Java中遇到这个异常:
java.io.FileNotFoundException: (Too many open files)
Run Code Online (Sandbox Code Playgroud)
我正在寻找消除这个问题的方法.
此错误显然表明JVM已分配了太多句柄,而底层操作系统不会让它拥有更多.要么是因为连接不正确/流连接而导致泄漏.
此过程不间断运行数天,最终抛出异常.在12-14天的正常运行时间后反复发生.
你怎么打这个?有没有办法在JVM中获取已分配句柄的列表或在达到一定数量时跟踪?我喜欢打印它们,看看它是如何生长的.我不能使用分析器,因为它是一个生产系统,并且难以在开发中重现它.有什么建议吗?
我正在监视空闲堆大小并在接近-Xmx中指定总数的1%时引发"警报".我也知道,如果我的线程数达到500以上,那么肯定会失控.现在,有没有办法知道我的JVM 从操作系统分配了太多的句柄,并没有给它们回复,例如套接字,打开的文件等.如果我知道这一点,我会知道在哪里看,什么时候.
我遇到了java TimeZone的奇怪问题..
调用TimeZone.getDefault()会给出我的本地时区,其ID为"GMT + 02:00".有趣的是,此ID不会出现在TimeZone.getAvailableIDs()提供的列表中.显然我的区域似乎是"Etc/GMT + 2".
我正在尝试使用时区填充组合,但是不可能选择,因为GMT + 02:00不在列表中..任何人都看到了这个问题?有任何想法吗?
更新:
底线是 - 不能依赖ID字符串,必须与偏移量一起使用,因为显示ID可能因系统而异.
您如何在SWT表中显示大量行?巨大的是20K行,20列.不要问我为什么需要显示那么多数据,这不是重点.关键是如何让它尽可能快地工作,以便最终用户不会感到无聊等待.每行显示一些对象的实例,列是其属性(一些).我想使用JFace内容/标签提供程序模式,但担心它会比直接用数据命中表更慢.这是怎么回事:
Display.getDefault().asyncExec(new Runnable() {
public void run() {
List<MyObject> objects = model.getViewData();
for(MyObject object: objects){
TableItem item = new TableItem(table, SWT.NULL);
item.setImage(0, img1);
item.setBackground(color1);
item.setText(0, object.getProperty0());
item.setText(1, object.getProperty1());
item.setText(2, object.getProperty2());
.....
}
});
Run Code Online (Sandbox Code Playgroud)
在我的计算机上绘制20k记录大约需要20秒.我在Windows中遇到的最大性能问题是由新建表项创建和填充文本时由SWT发送的大量本机窗口消息引起的.我找到了很好的解决方法 - 在填充之前隐藏表,然后在完成后显示它.只需在循环之前调用table.setVisible(false),在循环之后调用table.setVisible(true)就可以了 - 速度上升了六七倍!
我想加快速度.你会建议什么?另外,我想知道隐藏小部件的这个技巧如何在SWT(又称Linux)的非Windows实现上起作用?
我遇到了基于MacOS的cordova.这些版本适用于Android,但构建iOS真的很痛苦.这是发生的事情:
>cordova build ios --device --debug --buildConfig ./build.json
.....
Check dependencies
No profile matching '******' found: Xcode couldn't find a profile matching '******'. Install the profile (by dragging and dropping it onto Xcode's dock item) or select a different one in the General tab of the target editor.
Code signing is required for product type 'Application' in SDK 'iOS 10.2'
Run Code Online (Sandbox Code Playgroud)
这是一系列最新版本的全新安装(node,cordova,cordova-ios,XCode等).我根据开发人员ID,团队,证书和配置文件设置了所有内容.所有这些工件都是有效的,我肯定知道,因为我正在将这个版本从英特尔XDK移动到我当地的Mac计算机上.这是我的build.json:
{
"ios": {
"debug": {
"provisioningProfile": "******",
"developmentTeam": "******",
"packageType": "development"
},
"release": {
"provisioningProfile": "******",
"developmentTeam": "*******",
"packageType": …Run Code Online (Sandbox Code Playgroud) 我即将开始开发相当大的基于Java的桌面应用程序.在查看JIDE组件和框架之后,它似乎是一个很好的解决方案.我想听听使用这些产品的人的意见.他们有多可靠?什么是学习曲线?优点和缺点?
为log4j(扩展AppenderSkeleton)创建的自定义appender可以与新的logback框架一起使用吗?我知道logback有自己的一组类似于log4j的appender,但是这可以重用现有的吗?怎么样?
我们从大量主机收集和存储仪器数据.我们的存储是MongoDB - 带有副本的几个分片.一切都存储在一个大型集合中.我们插入的每个文档都是基于时间的观察,具有一些属性(测量).时间戳是最重要的属性,因为所有查询至少都基于时间.文档永远不会更新,因此它是一个纯粹的写入查找模型.现在它与几十亿个文档合作得很好.
现在,
我们希望增长一点并持有长达12个月的数据,这可能相当于一个可怕的万亿+观察(文件).如果将所有东西都倾倒在一个怪异的集合中是我最好的选择,或者有一种更聪明的方法可以解决这个问题.我的意思是更聪明 - 使用更少的硬件,同时仍然提供快速插入和(重要的)快速查询.所以我考虑将大型集合分成更小的部分,希望获得索引,插入和查询速度的内存.
我查看了分片,但是时间戳分片听起来像个坏主意,因为所有写入都将进入一个节点,取消了分片的好处.插入率非常高,因此我们需要分片才能在此处正常工作.我还考虑过每个月创建一个新的集合,然后为用户查询选择一个相关的集合.超过12个月的馆藏将被删除或存档.还可以选择每月创建一个全新的数据库,并进行类似的轮换.其他选择?或许一个大收集的成长真正的大的选择吗?
请在类似应用中分享您的经验和注意事项.
我有一个可以正常工作的基于Cordova的应用程序,目前具有相对较大的用户群。到目前为止,除了没有问题这一个苹果公司将不会解决。没关系,我们创建了丑陋的变通办法,只是为了继续前进...
但是,在这里谈到iOS的13(测试版8),我们学习本新闻稿中的WebKit不将Cookie传回服务器的所有。没有一次,不是一开始就-永远不会。iOS 13的发布要提前几周,当所有用户升级到它并且我们的应用停止工作时,我根本不知道该怎么办...
我们使用cookie进行会话管理,没什么花哨的,基于经典的旧码头的后端。我针对首次使用问题所做的解决方法是,在每个请求的URL上附加jsessionid参数,然后在服务器端将其剥离,转换为cookie并沿链进一步发送。我不知道假设WebKit停止发送回cookie一直使用它是否安全。以下是一些相关的待解决的错误,但Apple不太可能查看它们:
有人遇到类似的问题吗?你如何解决?
我正在努力寻找我们生产 JVM 上的“Full GC”。每天午夜左右,STW 无明显原因地发生,持续 10-11 秒,相当致命。这是GC日志:
Java HotSpot(TM) 64-Bit Server VM (25.131-b11) for windows-amd64 JRE (1.8.0_131-b11), built on Mar 15 2017 01:23:53 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 16584284k(13074876k free), swap 23137624k(18439472k free)
CommandLine flags: -XX:GCLogFileSize=1024000 -XX:InitialHeapSize=11811160064 -XX:+ManagementServer -XX:MaxHeapSize=11811160064 -XX:NumberOfGCLogFiles=10 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseGCLogFileRotation -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
...
2020-01-17T00:00:04.411+0200: 113734.053: [GC (Heap Inspection Initiated GC) [PSYoungGen: 522474K->146371K(3387904K)] 6946079K->6573263K(11077632K), 0.1786961 secs] [Times: user=0.67 sys=0.02, real=0.18 secs]
2020-01-17T00:00:04.592+0200: 113734.233: [Full GC (Heap Inspection Initiated …Run Code Online (Sandbox Code Playgroud) 从长远来看,我发现 MongoDB Java 驱动程序 (v3.0.3) 堆积了大量线程。所有这些线程都是服务器监控线程,全部停放等待:
cluster-ClusterId{value='562233d1b26c940820028340', description='null'}-192.168.0.2:27017
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.waitForSignalOrTimeout(DefaultServerMonitor.java:237)
com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.waitForNext(DefaultServerMonitor.java:218)
com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:167)
java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
目前约有 250 人。我认为不需要很多线程来监视与单个数据库主机的连接。我显然做错了什么......,但据我所知,当从驱动程序 v2 移动到 v3 时,我们没有做任何设置更改。可能是驱动程序的错误?有任何想法吗?