线程死锁?java线程死锁和内存溢出,该怎么解决
一、java线程死锁和内存溢出,该怎么解决
java线程死锁或者线程数过高的:
1、获取java的进程ID
ps-ef|grepjava
2、导出线程堆栈(其中32494换为上一个步骤查询到的进程ID)
jstack-l32494>>/usr/local/Client/log20180116.log
3、将上一个步骤生成导出.log文件拷贝到本机,然后用记事本打开,检查哪个线程有大量的重复,之后再结合业务进行排除。(比如如果60%都是其中某个类的某个方法引起的堆栈,则很有可能是这个方法阻塞了)
二、编程可以避免死锁吗,怎样做到
数据库死锁通常出现在表级及行级锁定相关的语句。如显式锁定、更新等操作。通常在数据库(SQL)的说明中都有标明相关的(隐式)锁定操作。所以必须要熟记相关的SQL操作过程。如果程序中使用了线程,就要小心线程间竞争资源,或对锁定表、记录的操作时序。
多线程编程是一门学问,只能通过不断学习、练习、及习惯,来渐渐掌握体会。