精华内容
下载资源
问答
  • 包括我们传统上讲的线程的运行就绪状态。 那么这个超时时间是哪里设置的呢?java操作数据库应用层还是JDBC,查看JDBC参数果然有connectTimeoutsocketTimeout,设置后,果然到指定时间就超出超时的异常了 推荐...

    现象:应用服务器到数据库的网络不通;启动应用后应用程序卡在数据库操作的地方;但是一般来京数据库操作都会有超时,如果连不上数据库或者慢查询耗时太久都应该报超时异常才对,为什么hang住不报异常呢?

    我使用的spring mybatis框架,druid datasource,查看druid 配置并没数据库连接超时或者网络通信超时的配置。

    排查过程:使用jps -lvm 查看正在运行的java进程ID 找到自己的应用程序id;然后jstack -l 进程ID查看

    发现工作线程阻塞在了socketRead0()上;注意:
    java.lang.Thread.StateRUNNABLE 指处于可运行状态的某一线程正在 Java 虚拟机中运行,但它可能正在等待操作系统中的其他资源,比如处理器。包括我们传统上讲的线程的运行和就绪状态。

    那么这个超时时间是哪里设置的呢?java操作数据库应用层还是JDBC,查看JDBC参数果然有connectTimeout和socketTimeout,设置后,果然到指定时间就超出超时的异常了

     

     

    推荐阅读https://zhuanlan.zhihu.com/p/43746959

    展开全文
  • 静止就绪:指进程在外存中不能被直接调度的就绪状态,只有当主存中没有活跃就绪态进程,或者是挂起态进程具有更高的优先级,系统将把挂起就绪态进程调回主存并转换为活跃就绪。 活跃阻塞:指进程在内存中等待的事件...

    基本概念

    • 创建状态:指进程因资源尚未满足,创建工作未完成,不能执行的状态
    • 终止状态:指进程终止不再执行,系统删除该进程,将PCB清零,回收PCB
    • 挂起操作:将进程从主存中移至外存中
    • 激活操作:将进程从外存中移到内存中
    • 活动就绪:指进程在内存中一旦获得处理器就可以执行的状态
    • 静止就绪:指进程在外存中不能被直接调度的就绪状态,只有当主存中没有活跃就绪态进程,或者是挂起态进程具有更高的优先级,系统将把挂起就绪态进程调回主存并转换为活跃就绪。
    • 活跃阻塞:指进程在内存中等待的事件发生的状态,一旦事件发生便进入活跃就绪状态。
    • 静止阻塞:指进程因挂起操作在外存中等待事件发生的状态,一旦等待的事件产生,便进入静止就绪状态。
      在这里插入图片描述

    挂起和阻塞的区别?

    • 挂起是一个行为,而阻塞是进程的一种状态

    • 进程存放的位置不同:挂起是将进程移到外存中,而处于阻塞状态的进程还是在内存

    • 原因不同:导致进程被挂起的原因一般是内存不足或者是系统、用户的请求,协调、修改进程,研究进程的状态等,进程阻塞是进程正在等待某一事件发生,可能是等待资源或者响应等(eg.等待I/O完成等)而暂时停止运行

    • 挂起对应的行为是激活,将外存中的进程调入内存中。而处于阻塞状态的进程需要其他进程或系统唤醒

    • 挂起是被动的行为,进程被迫从内存中移至外存中。而进入阻塞可以看成是一个主动的行为(eg.进程I/O时,进程在等待I/O设备完成时,进程主动进入阻塞状态,I/O完成,进程被激活)

    创建进程时内存不足,进程处于什么状态?

    进程处于创建态或者静止就绪态。当进程完成创建,因内存不足及其他一些原因(系统或用户的请求)而移到外存中去,此时进程就处于静止就绪状态。如果进程创建过程中因内存不足(未初始化PCB),未完成进程的创建,此时则处于创建状态。关键在于此时的进程是否完成创建

    展开全文
  • Linux 休眠和挂起

    千次阅读 2010-11-18 00:14:00
    Linux休眠和挂起(2008新版) Linux2.6内核已经有了非常多的变化,配置也要相应的改变 The only thing that not changes is Change:) 系统要求: 配置编译内核:kernel2.6.22,2.6.24...

    Linux休眠和挂起(2008新版)
    Linux2.6内核已经有了非常多的变化,配置也要相应的改变

    The only thing that not changes is Change:)

    系统要求:
    配置编译内核:kernel2.6.22,2.6.24适用,最新内核未作测试
    所需上层软件:hibernate,hal,gnome-power-manager

    测试环境:
    系统:Debian lenny/sid
    桌面:gnome2.22
    机器:Thinkpad r40

    操作细节:
    1.必需的内核选项:
    Power Management support:
    Suspend to Ram and Standby
    Hibernate
    ()Default resume partition
    (如果有多个swap交换区,需要设定默认使用的swap。用fdisk -l确定)
    ACPI Support
    Future power /sys interface
    AC adapter
    Battery
    Button
    Fan
    Processor
    Thermal zone

    Device driver

    Block devices
    Ram Disk support

    编译时一定要注意:使用initrd引导内核

    2.命令行工具hibernate

    安装hibernate
    sudo aptitude install hibernate

    配置hiberante
    sudo dpkg-reconfigure hibernate
    主要是休眠唤醒密码。
    sudo hibernate-disk // sleep,系统内存映象将写入swap区后关机
    sudo hibernate-ram // suspend,就是挂起。

    3.图形界面下的工具

    环境:gnome2.22

    所需上层软件:hal,gnome-power-manager

    sudo aptitude install gnome-power-manager

    将电源管理加到系统任务栏Panel。

     

    到这里root用户已经可以使用鼠标实现挂起和休眠了


    普通用户使用休眠的关键:增加权限

    最简单安全的方法就是加入管理休眠的组group,他们是haldaemon,powerdev。

    注意,haldaemon可能在你的机器上是hal,主要是hal版本新旧的原因。

    加入以上两个group,就可以很方便的使用电源管理了。


    小结:
    *linux下suspend和hibernate模式可以随意使用,不需要额外的配置,较为方便。而windows xp只能是sleep模式,或者suspend模式,二者切换需要更新设置。
    *linux里涉及具体硬件的驱动太多,非常希望有一天它们能从内核里抽象出来,放到Userspace里。

     

    展开全文
  • suspend(挂起)resume(继续执行)线程

    千次阅读 2018-10-18 12:24:57
    (suspend)继续执行(resume),这两个 操作是一对相反的操作 ,被挂起的线程,必须要等到resume()操作后,才能继续执行,咋看之下,这对操作就像 Thread.stop()方法一样好用,但如果你仔细阅读文档说明,会发现它们...

    简介:

            线程挂起 (suspend)和继续执行(resume),这两个 操作是一对相反的操作 ,被挂起的线程,必须要等到resume()操作后,才能继续执行,咋看之下,这对操作就像 Thread.stop()方法一样好用,但如果你仔细阅读文档说明,会发现它们也早已被标注未废弃方法,并不推荐使用。

            不推荐使用suspend()去挂起线程的原因,是因为suspend()在导致线程暂停的同时,并不会去释放任何锁资源。此时,其他任何线程想要访问被它暂用的锁时,都会被牵连,导致无法正常继续运行(如图所示)。直到对应的线程上进行了resume()操作,被挂起的线程才能继续,从而其他阻塞在相关锁上的线程也可以继续执行。但是,如果resume()操作意外地在suspend()前就执行了,那么被挂起的线程可能很难有机会被继续执行。并且,更严重的是:它所占用的锁不会被释放,因此可能会导致整个系统工作不正常。而且,对于被挂起的线程,从它的线程状态上看,居然还是Runnable,这也会严重影响我们对系统当前的判断。

     

    案例一:(通过打断点调试)

    package com.threadstop.demo;
     
     
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
     
     
    /**
     *说明:
     *调用了suspend方法,将t0线程挂起,但是出现的问题是,t0.suspend方法之后的代码不执行了,搞了半天终于知道为什么了,
     *因为在t0里面使用了System.out.println方法了,查看println方法的源代码发现他是个同步的方法,加锁了,这个锁是哪个呢?
     *对就是PrintStream,在Main中的printCurrentAliveThread方法中用到了System.out.println方法,打断点才知道
     *搞了半天阻塞在这里了,因为我们知道suspend方法是不释放锁的,所以导致会阻塞在println方法中,但是有一个前提是t0线程和main线程
     *的println方法中拿到的是同一个锁,这时候在看一下System.out变量时一个static PrintStream,这时候就明了了,因为是static
     *所以对象是相同的,这两个线程拿到的System.out是同一个对象,所以这两个线程也是拿到的是相同的锁的。
     *
     */
     
     
    public class ThreadStopLock {
    	
    	public static void main(String[] args) {
    		try {
    			//定义线程
    			Thread t0 = new Thread() {
    				public void run() {
    					try {
    						for(long i=0;i<1000*1000*10;i++){
    							System.out.println(i);
    						}
    						System.out.println("thread death");
    					} catch (Throwable ex) {
    						System.out.println("Caught in run: " + ex);
    						ex.printStackTrace();
    					}
    				}
    			};
    			//开启线程
    			t0.start();
    			//等待2s之后挂起线程t0
    			Thread.sleep(2*1000);
    			//挂起线程
    			t0.suspend();
    			//打印当前的所有线程
    			printCurrentAliveThread();
    			//等待2s之后恢复线程
    			Thread.sleep(2*1000);
    			//复活线程
    			t0.resume();
    			
    		} catch (Throwable t) {
    			System.out.println("Caught in main: " + t);
    			t.printStackTrace();
    		}
     
     
    	}
    	
    	/**
    	 * 打印当前线程
    	 */
    	public static void printCurrentAliveThread(){
    		Map<Thread, StackTraceElement[]> maps = Thread.getAllStackTraces();
    		Set<Entry<Thread, StackTraceElement[]>> set = maps.entrySet();
    		Iterator<Entry<Thread,StackTraceElement[]>> iterator = set.iterator();
    		System.out.println("System Alive Thread List:");
    		System.out.println("-------------------------");
    		while(iterator.hasNext()){
    			System.out.println("AliveThread_Name:"+iterator.next().getKey().getName());
    		}
    		System.out.println("-------------------------");
    	}
    	
    }
    

    运行结果(程序被挂起,且不会终止):

    案例二:

    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    public class BadSuspend {
        public static Object u = new Object();
        static ChangeObjectThread t1 = new ChangeObjectThread("t1");
        static ChangeObjectThread t2 = new ChangeObjectThread("t2");
    
        public static class ChangeObjectThread extends Thread{
            public ChangeObjectThread(String name){
                super.setName(name);
            }
            @Override
            public void run() {
                synchronized (u){
                    try{
                        System.out.println("in:" + getName());
                        Thread.currentThread().suspend();
                        System.out.println("thread continue run:" + getName());
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }
        }
    
        public static void main(String[] args) throws InterruptedException{
            t1.start();
            t2.start();
            Thread.sleep(2000);
            t1.resume();
            t2.resume();
            t1.join();
            t2.join();
        }
    
    }

    运行结果(程序被挂起,且不会终止):

     

     

    展开全文
  • .Net 下调试跟踪线程挂起和程序死循环  作者:Eaglet .Net 下的程序调试相对C/C++要简单很多,少了那些令人头疼的指针越界的问题。不过当你的程序遇到如下问题时,依然非常棘手: 1. 进程异常终止。解决方案见 ...
  • .Net 下调试跟踪线程挂起和程序死循环作者:Eaglet .Net 下的程序调试相对C/C++要简单很多,少了那些令人头疼的指针越界的问题。不过当你的程序遇到如下问题时,依然非常棘手: 1. 进程异常终止。解决方案见 .Net ...
  • 挂起、阻塞、睡眠

    2018-08-23 19:18:42
    要说挂起、阻塞、睡眠难免让人想到进程生命周期中的阻塞态或者等待状态,而挂起和睡眠却没有出现在进程生命周期中,说明这三个其实在本质上区别并不那么大,但是既然称呼不同,应该就有不同的道理。 先说阻塞,既然...
  • USB挂起与唤醒.

    2019-09-30 15:03:05
    USB可见设备状态分为连接(Attached),上电(Powered),默认(Default),地址(Address),配置(Configured)和挂起(Suspended)6个状态。所谓可见,即USB系统主机可见的状态,其他状态属于USB设备内部而不可见。其中有关...
  • 2.STM32 USB挂起机制 3.STM32 USB唤醒机制 1.STM32 USB复位机制 主机可以对USB设备进行复位,主要是主机在设备通讯之前会发送Reset信号把设备设置到默认的配置状态,即主机拉低两根信号线(SE0状态)并保持10...
  • 在很多时候我们都会需要打印文档,但是打印过程中会有一些问题出现,如打印文档里无法打印,右下角显示文档被挂起,那么Win7打印时文档被挂起怎么解决呢,下面小编大家分享下具体Win7打印时文档被挂起的解决方法。...
  • USB的挂起与唤醒功能概述

    千次阅读 2018-06-30 13:40:46
    USB协议的第9章讲到USB可见设备状态,分为连接(Attached),上电(Powered),默认(Default),地址(Address),配置(Configured)和挂起(Suspended)6个状态。所谓可见,即USB系统主机可见的状态,其他状态属于USB设备...
  • 最初,该应用程序仅会关闭计算机,从而关闭计算机的名称,但现在它可以挂起,Hibernate或运行用户提供的任何自定义命令。 该软件仅适用于Linux操作系统。 它可以在任何现代Linux发行版上运行。 提供DebRPM软件包...
  • USB选择性暂停是Windows操作系统中一项非常有用的电源管理功能,借助此功能,你可以将使用的USB端口挂起以降低计算机的功耗。这将或多或少为你的Windows电脑带来更长的续航时间,今天,这篇教程将你分享启用该...
  • 安装后,扩展程序将根据用户的设置挂起未使用的卡。 感谢Chrome的《 。 请注意,位于底部的Firefox Tab Suspender受到了他的工作的极大启发。 发展路线图 在此下可以找到公共发展路线图。 细节值得关注: 在开发...
  • 我一直在试图用所谓的奥斯瓦尔德一个WOFF字体本地... 有使用WOFF三个主要优势: 字体数据进行压缩,所以使用WOFF网站将使用更少的带宽负载会比他们使用相当于压缩的TrueType或OpenType文件的速度。 许多字体供...
  • SIGCONT(continue) 让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在... 注意它terminate以及interrupt的区别:该进程还结束, 只是暂停执行. 本信号不能被阻塞, 处理或
  • 它适用于ChromeIE9,但不适用于Firefox! 调查开始了…… 还有一些正在流产。 为什么要使用WOFF? 使用WOFF有三个主要好处: 字体数据是压缩的,因此与使用等效的压缩TrueType或OpenType文件的站点...
  • 根据哈工大课程cup管理章节,为了使cpu被充分利用,因此引进了多进程的概念,一个进程在等待io命令时,此时,我们就将该进程挂起,执行其他进程,cpu通过PCB控制进程,而进程等待队列又分为就绪队列阻塞队列。...
  • 本文主要说的是接收到推送消息的处理,至于集成比较简单,不再本文探讨范围之内,网上也有很多文章。...2.程序在后台挂起 ;3:程序在前台运行 。启动APP分为两种:1.点击推送消息;2.点击应用图标。查看了一
  • 他们在公司还远达到交不水电费,或者开不工资的情况下,就自己先炸开了锅,要么放弃去做别的事了,要么甚至是突然消失,你连他们干什么去都不知道了。 这里我与大家分享一个小秘密:在我很早以前做第一个创业...
  • 文章目录学习记录内容实际操作 学习记录 程序执行有点底层了。 内容 ctrl+zctrl+c功能看起来很相似都是终止当前程序运行,但是两者的原理是不尽...执行ctrl+c操作,可以将当前进程挂起,执行其他操作,执行完后...
  • 规定道数,设置后备队列和挂起状态。若内存中进程少于规定道数,可自 动从后备队列调度一作业进入。被挂起进程入挂起队列,设置解挂功能用于 将指定挂起进程解挂入就绪队列 每次调度后,显示各进程状态 采用最先适应...
  • 这是火狐社区的文章,对火狐浏览器无故卡死,响应或者占大量cpu资源有详细的说明解决,记录下!!! ++++++++++++++++++++++++++++++++ Firefox 挂起 如果您的 Firefox 无论怎么操作都没有反应,同时Firefox ...
  • ORADEBUG是诊断性能和挂起问题的有效工具。能够合适正确的IP地址,帮助实时应用集群实例间的通信。11g之前,ORADEBUG TRACEFILE_NAME是用来确定一个进程写入追踪文件名字的唯一途径。  该工具主要是给ORACLE支持...
  • 同步异步 ...非阻塞的划分,决定挂起或者去做其它事情 异步 应用程序无须去向系统内核询问,在内核读取完数据之后会主动通知应用 同步异步不决定等待数据返回时的状态。关注的是任务完成...
  • 其基本工作原理是多个线程持有同一个XXXResetEvent,在这个XXXResetEvent被set前,各线程都在WaitOne()除挂起;在这个XXXResetEvent被set后,所有被挂起的线程中有一个(AutoResetEvent的情况下)或全部...
  • suspendresume死锁案例

    2021-02-09 15:17:36
    suspendresume死锁案例suspendresume死锁示例代码1...2.、suspend 挂起并不会释放锁。 死锁示例代码1(释放锁) 下面展示一些 内联代码片。 … /* 包子店 / public static Object baozidian = null; /* 死锁的s

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 433
精华内容 173
关键字:

挂起和未挂起