精华内容
下载资源
问答
  • 段错误 核心已转储转储是诊断与内存相关的问题的重要工件,例如内存泄漏缓慢,垃圾回收问题和java.lang.OutOfMemoryError。它们也是优化内存消耗的重要工件。 有很棒的工具,例如Eclipse MAT和Heap Hero,可以...
    段错误 核心已转储

    段错误 核心已转储

    堆转储是诊断与内存相关的问题的重要工件,例如内存泄漏缓慢,垃圾回收问题和java.lang.OutOfMemoryError。它们也是优化内存消耗的重要工件。

    有很棒的工具,例如Eclipse MATHeap Hero,可以分析堆转储。 但是,您需要为这些工具提供以正确的格式和正确的时间点捕获的堆转储。

    本文为您提供了捕获堆转储的多个选项。 但是,我认为前三个是有效的选择,而其他三个则是个不错的选择。

    1. jmap

    jmap打印堆转储到指定的文件位置。 该工具打包在JDK中。 可以在bin文件夹中找到它。

    这是调用jmap的方法:

     jmap -dump:format=b,file=<file-path> <pid>
     where
     pid: is the Java Process Id, whose heap dump should be captured
     file-path: is the file path where heap dump will be written in to.
    

    例:

    1个 jmap -dump:format = b,file = / opt / tmp / heapdump.bin 37320

    注意:传递“实时”选项非常重要。 如果通过此选项,则仅将内存中的活动对象写入堆转储文件。 如果未通过此选项,则所有对象,即使是准备进行垃圾回收的对象,都将打印在堆转储文件中。 它将大大增加堆转储文件的大小。 这也将使分析变得乏味。 要解决内存问题或优化内存,仅“ live”选项就足够了。

    2. HeapDumpOnOutOfMemoryError

    当应用程序遇到java.lang.OutOfMemoryError时,理想的方法是立即捕获堆转储以诊断问题,因为您想知道java.lang.OutOfMemoryError发生时位于内存中的对象以及它们占用的内存百分比。 但是,由于当前的高温,大多数情况下,IT /运营团队会忘记捕获堆转储。 不仅如此,他们还重新启动了应用程序。 如果没有在正确的时间捕获堆转储,就很难诊断出任何内存问题。

    这就是该选项非常方便的地方。 在应用程序启动期间传递“ -XX:+ HeapDumpOnOutOfMemoryError”系统属性时,JVM将在JVM遇到OutOfMemoryError时捕获堆转储。

    用法示例:

    1个

    注意:捕获的堆转储将在'-XX:HeapDumpPath'系统属性指定的位置打印。

    最佳实践:始终保持在所有应用程序中配置此属性,因为您永远不知道何时会发生OutOfMemoryError.jcmd3。

    3. jcmd

    jcmd工具用于将诊断命令请求发送到JVM。 它打包为JDK的一部分。 可以在bin文件夹中找到它。

    这是调用jcmd的方法:

    1个

    例:

    1个jcmd 37320 GC.heap_dump /opt/tmp/heapdump.bin

    4. JVisualVM

    JVisualVM是一个监视,故障排除工具,打包在JDK中。 启动此工具时,您可以看到本地计算机上正在运行的所有Java进程。 您也可以使用此工具连接到在远程计算机上运行的Java进程。

    脚步:

    1. bin文件夹下启动jvisualvm
    2. 右键单击其中一个Java进程
    3. 单击下拉菜单上的“堆转储”选项
    4. 将生成堆转储
    5. 将在“摘要”选项卡>“基本信息”>“文件”部分中指定生成堆转储的文件路径。
    图:从JVisualVM捕获堆转储

    5. JMX

    有一个com.sun.management:type=HotSpotDiagnostic MBean 此MBean具有“ dumpHeap”操作。 调用此操作将捕获堆转储。 'dumpHeap'操作采用两个输入参数:

    1. outputFile:应将堆转储写入的文件路径
    2. live:传递“ true”时,仅捕获堆中的活动对象

    您可以使用JMX客户端(例如JConsole, jmxsh和Java Mission Control)来调用此MBean操作。

    图:使用Java Mission Control作为JMX客户端来生成堆转储

    6.程序化方法

    除了使用工具之外,您还可以以编程方式从应用程序中捕获堆转储。 在某些情况下,您可能希望基于应用程序中的某些事件来捕获堆转储。 这是Oracle的一篇好文章,通过调用com.sun.management:type=HotSpotDiagnostic MBean JMX Bean,提供了从应用程序捕获堆转储的源代码,我们在上述方法中对此进行了讨论。

    7. IBM管理控制台

    如果您的应用程序在IBM Websphere Application Server上运行,则可以使用管理控制台来生成堆。

    脚步:

    1. 启动管理控制台
    2. 在导航窗格中,单击故障排除> Java转储和核心
    3. 选择要为其生成堆转储的server_name
    4. 单击“堆转储”以生成指定服务器的堆转储。

    您也可以使用wsadmin生成堆转储。

    翻译自: https://www.javacodegeeks.com/2019/10/7-options-to-capture-java-heap-dumps.html

    段错误 核心已转储

    展开全文
  • 段错误 核心已转储转储是诊断与内存相关的问题(例如内存泄漏,垃圾回收问题和java.lang.OutOfMemoryError)的重要工件。 它们也是优化内存使用情况的重要工件。 在本文中,我们提供了几种不同的选项来从Android ...
    段错误 核心已转储

    段错误 核心已转储

    堆转储是诊断与内存相关的问题(例如内存泄漏,垃圾回收问题和java.lang.OutOfMemoryError)的重要工件。 它们也是优化内存使用情况的重要工件。

    在本文中,我们提供了几种不同的选项来从Android Apps捕获堆转储。 捕获堆转储后,可以使用HeapHeroAndroid studio的堆分析器等出色的工具来分析堆转储。

    内存分析器

    以下是从Android Studio中的Memory Profiler捕获堆转储的步骤:

    一种。 运行该应用,然后从Android Studio中选择要配置的设备。

    b。 在您的Android Studio中,单击查看>>工具窗口>> Android Profiler

    C。 将有“内存”时间轴,该时间轴将在“ CPU”时间轴下方,但在“网络”时间轴上方。 在此内存时间轴中,单击下载按钮(下图突出显示)以从Android应用程序生成堆转储。

    d。 要将堆转储存储在系统中,请单击下图中突出显示的图标。

    e。 选择一个位置来保存生成的堆转储文件。

    Android调试桥(ADB)

    Android Debug Bridge是一个命令行工具,可让您与设备进行交互。 亚行提供了各种设备操作,例如安装和调试应用程序。 它还可以访问Unix Shell,以在设备上运行各种命令。 您可以使用此工具生成android堆转储。 启动ADB Shell,并执行以下步骤:

    一种。 识别您的Android应用的流程ID

    第一步是确定您的Android应用的流程ID。 您可以通过发出以下命令来做到这一点:

    adb shell ps | grep <APP-NAME>

    上面的命令将返回有关该过程的详细信息。 第二个数字将是您应用的PID。 请检查以下屏幕截图。              

    b。 创建一个堆转储:

     adb shell am dumpheap <PID> <HEAP-DUMP-FILE-PATH>
     PID: Your Android App Process Id
     HEAP-DUMP-FILE-PATH: Location where heap dump file should be generated
    

    例:

    adb shell am dumpheap 1769 /data/local/tmp/android.hprof

    C。 将文件拉到计算机上

    上面的步骤将在设备中生成堆转储文件。 为了进行分析,您需要将生成的文件拉到计算机上。 您可以通过发出以下命令来做到这一点:

     adb pull <HEAP-DUMP-FILE-PATH>
     HEAP-DUMP-FILE-PATH: Location where heap dump file
    

    例:

    adb pull /data/local/tmp/android.hprof

    在OutOfMemoryError上捕获堆转储

    如果将以下代码放置在应用程序中,则当您的应用程序收到OutOfMemoryError时,它将捕获堆转储。

     public class CaptureHeapDumps extends Application {
    
           private static final String FILE_NAME = "heap-dump.hprof" ;
    
           @Override
    
           public void onCreate() {
    
              super .onCreate();
     Thread.currentThread().setUncaughtExceptionHandler(OutOfMemoryException());
    
           }
    
           @NonNull
    
           private Thread.UncaughtExceptionHandler OutOfMemoryException() {
    
                   return new Thread.UncaughtExceptionHandler() {
    
                   @Override
    
                   public void uncaughtException(Thread t, Throwable e) {
    
                      String directory = getApplicationInfo().dataDir;
    
                      String absolutePath = new File(directory, FILE_NAME)
    
                             .getAbsolutePath();
    
                      try {
    
                          Debug.dumpHprofData(absolutePath);
    
                      } catch (IOException e) {
    
                          e.printStackTrace();
    
                      }
    
                   }
    
            };
    
        }
     }
    

    这将在以下位置生成堆转储文件:/data/user/0/appname/heap-dump.hprof

    翻译自: https://www.javacodegeeks.com/2019/09/hcapture-heap-dumps-from-android-app-3-options.html

    段错误 核心已转储

    展开全文
  • 段错误 核心已转储尝试解决

    千次阅读 2019-04-27 20:30:00
    调试时,报出以下错误: 1)每次运行都开38个线程,是否是线程超载[New Thread 0x7ffff2fd2700 (LWP 7415)] [New Thread 0x7ffff27d1700 (LWP 7416)] [New Thread 0x7fffeffd0700 (LWP 7417)] [New ...

    1.在进行

    gdb python
    r XX.py
    where

    调试时,报出以下错误:

    1)每次运行都开38个线程,是否是线程超载[New Thread 0x7ffff2fd2700 (LWP 7415)]

    [New Thread 0x7ffff27d1700 (LWP 7416)]
    [New Thread 0x7fffeffd0700 (LWP 7417)]
    [New Thread 0x7fffeb7cf700 (LWP 7418)]
    [New Thread 0x7fffe8fce700 (LWP 7419)]
    [New Thread 0x7fffe67cd700 (LWP 7420)]
    [New Thread 0x7fffe3fcc700 (LWP 7421)]
    [New Thread 0x7fffe17cb700 (LWP 7422)]
    [New Thread 0x7fffdefca700 (LWP 7423)]
    [New Thread 0x7fffdc7c9700 (LWP 7424)]
    [New Thread 0x7fffd9fc8700 (LWP 7425)]
    [New Thread 0x7fffd77c7700 (LWP 7426)]
    [New Thread 0x7fffd4fc6700 (LWP 7427)]
    [New Thread 0x7fffd27c5700 (LWP 7428)]
    [New Thread 0x7fffcffc4700 (LWP 7429)]
    [New Thread 0x7fffcd7c3700 (LWP 7430)]
    [New Thread 0x7fffcafc2700 (LWP 7431)]
    [New Thread 0x7fffc87c1700 (LWP 7432)]
    [New Thread 0x7fffc5fc0700 (LWP 7433)]
    [New Thread 0x7fffc37bf700 (LWP 7434)]
    [New Thread 0x7fffc0fbe700 (LWP 7435)]
    [New Thread 0x7fffbe7bd700 (LWP 7436)]
    [New Thread 0x7fffbbfbc700 (LWP 7437)]
    [New Thread 0x7fffb97bb700 (LWP 7438)]
    [New Thread 0x7fffb6fba700 (LWP 7439)]
    [New Thread 0x7fffb47b9700 (LWP 7440)]
    [New Thread 0x7fffb1fb8700 (LWP 7441)]
    [New Thread 0x7fffaf7b7700 (LWP 7442)]
    [New Thread 0x7fffacfb6700 (LWP 7443)]
    [New Thread 0x7fffaa7b5700 (LWP 7444)]
    [New Thread 0x7fffa7fb4700 (LWP 7445)]
    [New Thread 0x7fffa57b3700 (LWP 7446)]
    [New Thread 0x7fffa2fb2700 (LWP 7447)]
    [New Thread 0x7fffa07b1700 (LWP 7448)]
    [New Thread 0x7fff9dfb0700 (LWP 7449)]
    [New Thread
    0x7fff9b7af700 (LWP 7450)] [New Thread 0x7fff98fae700 (LWP 7451)] [New Thread 0x7fff967ad700 (LWP 7452)] [New Thread 0x7fff93fac700 (LWP 7453)]

     

    2)现在报出:

    ERROR (theano.gpuarray): Could not initialize pygpu, support disabled
    。。。
      File "pygpu/gpuarray.pyx", line 658, in pygpu.gpuarray.init
      File "pygpu/gpuarray.pyx", line 587, in pygpu.gpuarray.pygpu_init
    GpuArrayException: cuDeviceGet: CUDA_ERROR_INVALID_DEVICE: invalid device ordinal

    先不解决这个,先尝试测试一下:

    发现,在import keras,也会报上述同样的错误!

     conda install mkl
    conda install mkl-service
    #使用以上两句均显示:
    # All requested packages already installed.
    
    conda install blas

     依旧不可以导入keras包。

     3)将原有的conda环境删除,又新创建了环境,用conda安装了mkl之后,尝试import keras之后,仍然报错:

    Using Theano backend.
    ~/lib/python2.7/site-packages/theano/gpuarray/dnn.py:184: UserWarning: Your cuDNN version is more recent than Theano. 
    If you encounter problems, try updating Theano or downgrading cuDNN to a version >= v5 and <= v7. warnings.warn("Your cuDNN version is more recent than " ERROR (theano.gpuarray): Could not initialize pygpu, support disabled Traceback (most recent call last): File "~/lib/python2.7/site-packages/theano/gpuarray/__init__.py", line 227, in <module> use(config.device) File "~/lib/python2.7/site-packages/theano/gpuarray/__init__.py", line 214, in use init_dev(device, preallocate=preallocate) File "~/lib/python2.7/site-packages/theano/gpuarray/__init__.py", line 99, in init_dev **args) File "pygpu/gpuarray.pyx", line 658, in pygpu.gpuarray.init File "pygpu/gpuarray.pyx", line 587, in pygpu.gpuarray.pygpu_init GpuArrayException: cuDeviceGet: CUDA_ERROR_INVALID_DEVICE: invalid device ordinal

    在我的.theanorc配置文件中,是这么写的:

    [global]
    floatX = float32
    device =cuda1

     

    尝试去掉cuda编号?居然成功了!

    Using Theano backend.
    ~/.conda/envs/xhs/lib/python2.7/site-packages/theano/gpuarray/dnn.py:184: UserWarning: Your cuDNN version is more recent than Theano.
    If you encounter problems, try updating Theano or downgrading cuDNN to a version >= v5 and <= v7. warnings.warn("Your cuDNN version is more recent than " Using cuDNN version 7201 on context None Mapped name None to device cuda: GeForce GTX 1080 Ti (0000:03:00.0)

     

    接下来尝试解决 上述的用户警告。

    由于theano已经是1.0.4最新版本,无法再进行更新,只能尝试将cuDNN版本降级。

    但是使用conda list查看所有安装的包:

    cudnn                     6.0.21                cuda8.0_0    https://mirrors.tuna.tsinghua.edu.cn/a
    #尝试此命令查看pygpu是否可用
    DEVICE="cuda" python -c "import pygpu; pygpu.test()"

     

    出现以下问题:https://github.com/Theano/Theano/issues/6420

    此帮助里说,如果不是使用多个GPU可以忽略test_collectives error。

    #尝试以下,
    python test_gpu.py
    ~/.conda/envs/xhs/lib/python2.7/site-packages/theano/gpuarray/dnn.py:184: UserWarning: Your cuDNN version is more recent than Theano. If you encounter problems, try updating Theano or downgrading cuDNN to a version >= v5 and <= v7.
      warnings.warn("Your cuDNN version is more recent than "
    Using cuDNN version 7201 on context None
    Mapped name None to device cuda: GeForce GTX 1080 Ti (0000:03:00.0)
    [GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float32, vector)>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
    Looping 1000 times took 0.192847 seconds
    Result is [1.2317803 1.6187935 1.5227807 ... 2.2077181 2.2996776 1.623233 ]
    Used the gpu

     

    发现其使用的cudnn版本是7.2,明明是6.0但是却调用了7.2?

    查看cuda的版本信息发现:

    nvcc -V
    
    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2017 NVIDIA Corporation
    Built on Fri_Sep__1_21:08:03_CDT_2017
    Cuda compilation tools, release 9.0, V9.0.176

     //发现安装cuda简直十分麻烦,所以下尝试一下运行程序。

     

    Starting epoch 0...
    段错误 (核心已转储)

     

     

     http://imatlab.lofter.com/post/286ffc_a6ead7

    #查看分配占空间的大小
    ulimit -a
    
    #显示
    stack size              (kbytes, -s) 8192

     

     

     

    也就仅仅8M大小,实在是太小了。

    改为ulimit -s 102400,仍旧段错误。

    试图将其调整为更大或者unlimit时,报错:

     

    -bash: ulimit: stack size: 无法修改 limit 值: 不允许的操作

     

    #使用sudo提示如下:
    sudo: ulimit:找不到命令

    在limit.conf下加了

     

    #*               soft    stack           unlimited

     再使用ulimit -s unlimited就可以用了,但是运行程序发现仍是段错误,继续修改

    #max locked memory       (kbytes, -l) 64
    #尝试修改maxloc但是同样的方法不起作用

    ——————

    终于解决了,在github上keras项目下发布的issue中找到了:

    由于本机上的CUDA版本为9,所以又根据教程安装了CUDA8版本,以及cuDNN6.0版本,之后就可以了!!! 

    就是由于CUDA9不适合theano1.0!!!所以必须将版本,降版本之后就没有上述的warning了,就可以成功跑theano后端的keras代码了。

    转载于:https://www.cnblogs.com/BlueBlueSea/p/10780182.html

    展开全文
  • Ubuntu——段错误 核心已转储

    千次阅读 2018-03-14 10:35:23
    可以通过执行以下步骤定位Python程序运行时的段错误:gdb python #在gbd中 r main.py #当段错误出现时,输入: where

    可以通过执行以下步骤定位Python程序运行时的段错误:

    gdb python
    
    #在gbd中
    r main.py
    
    #当段错误出现时,输入:
    where
    展开全文
  • 程序运行后出现,段错误核心已转储。整了一晚上没解决,求大神帮个0sd106zx2016.12.10浏览69次分享举报程序运行后出现,段错误核心已转储。整了一晚上没解决,求大神帮个忙看看。。代码如下:#include #include #...
  • 当运行python程序的时候,可以通过下面的操作找出出问题的部分。 gdb python #在gbd中 r main.py #当段错误出现时,输入: where
  • gdb使用core文件调试程序,解决“段错误核心已转储“的问题;设置core文件开关,解决> "警告:此文件自读入后发生改动!!!"以及"core pattern" E667:同步失败的信息;等问题
  • 把一个一列10行的数组 编程一个m行n列的数组 reshape函数 代码: #include<stdio.h> int reshape (int *fp,int m,int n) { int new[m][n]; int i; int j; for(j=0;j<...~
  • 可能程序存在不止一个错误,如果可以,麻烦一一指出 如果哪位高手能帮忙让程序跑出结果,我把剩下的140C送给他作为感谢! #include "pbc.h" int main(void) { pairing_t pairing; element_t g, h; ...
  • 段错误 (核心已转储)

    2019-10-13 22:08:40
    段错误 (核心已转储) ./qr 1.jpg 段错误 (核心已转储) 第一次运行可以正常运行检测,第二次则出现该问题 源代码如下: #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp...
  • 双卡跑的一个程序,程序本身没有问题,在其他的单卡电脑上是可以正常训练的。在终端中跑,训练1-2个epoch后就会出现这种报错,没有具体的,如果在单卡上跑,程序跑着跑着电脑死机,直接卡死啥都动不了,查看了显存和...
  • transformers在cuda8下的 BertForMaskedLM.from_pretrained 执行时会报 “段错误 (核心已转储)” 的错误,应该是cuda版本的问题,使用cuda10后错误消失
  • 段错误核心已转储)问题的分析方法

    万次阅读 多人点赞 2017-05-13 21:45:53
    通过实例详细说明了linux 下Segmentation fault(core dumped)(段错误核心已转储))的分析方法,段错误产生的必要条件,以及core dumped文件的存储,命名等。
  • 最近在ubuntu16.04上面使用ros打开小海龟界面节点程序的时候出现了段错误核心已转储这个错误 ![图片说明](https://img-ask.csdn.net/upload/201810/25/1540434508_551078.png) 非常感谢大家的帮助,自己是...
  • Python--Anaconda段错误 (核心已转储)

    千次阅读 2018-07-17 18:51:32
    更新Ubuntu系统后,Spyder启动失败: air@airfull:~$ spyder 段错误 (核心已转储) 解决办法: air@airfull:~$ conda install pyopengl
  • gcc编译错误段错误核心已转储

    千次阅读 2014-10-14 11:05:47
    gcc编译出现错误段错误核心已转储
  • 由于软件需求我写了个测试软件,我定义两个u8 的buf为1280*720*8的大小,也差不多要接近于15M 的大小了,在语法没有错误的情况下直接报段错误核心已转储)的错误。查找了相关的资料,在这里记录一下。 这里我们...
  • C程序 大数组:段错误 (核心已转储)

    千次阅读 2017-03-09 22:49:20
    在调试C/C++程序的时候,可能会遇到程序执行错误段错误 (核心已转储) 当在程序中定义一个大数组或者超大数字的时候,会出现上面的错误;导致这个错误的原因是因为内存越界导致的。 如定义数组: 1:char buf...
  • 在做ORB_SLAM2的时候,编译通过,运行时出错:段错误 (核心已转储),请问怎么解决? caomi@caomi-ubuntu:~/catkin_ws/src/ORB_SLAM2_modified$ rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,791
精华内容 5,516
关键字:

段错误(核心已转储)