⑴ java线上出了问题怎么排查
环境变量意思领命行输入命令环境变量指定所目录搜索并调用相应命令
现 内部或外部命令运行程序"等字没加进路径C:\Program Files\Java\jdk1.6.0_1\bin;自看看目录肯定没javac程序
解决办:找javac所路径添加进path
⑵ CMD中javac和java命令的问题
“类名.java”这是一个固定的语法规则,就像“1+1=2”是类似的道理。“包名.类名.java”之所以会出错是因为没有这样的语法规则,就像“你在大街上随便碰见个人就让他还你钱 你说人家会干嘛”另外你既然提到了src目录,说明你在用java编程工具写代码了,就可以不用cmd这种原始工具编译代码了。cmd命令只适合简单简短的代码,是初学者用来熟悉基础代码的。
java命令和javac命令,java命令是运行命令,javac是编译命令。拿煮饭举例子:一个java程序,javac命令是负责淘米煮饭的而java命令是负责吃饭的。当你执行java命令的时候,说明煮饭淘米已经完成。如果这两个顺序颠倒了饭都没煮你吃什么,不报错才怪。“包名。类名.java”这种语法也是错的
如果还是不明白可以留下qq远程加好友指导你,这种问题最好是能看到源代码,比较好解决,就单单一个图不能直接判断只能知道大概可能是哪些原因或者问题。不能有正对性的解决问题
⑶ 如何排查Java内存泄露
1.打开/tomcat_home/bin/catalina.bat文件
2.加上:set JAVA_OPTS=%JAVA_OPTS% -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:heapmp,这样当内存溢出是就会在对应路径下生成mp文件
⑷ java内存溢出的问题如何排查
java程序大家都知道,内存溢出是经常见的错误,下面从基本的开始分析!
内存溢出是由于没被引用的对象(垃圾)过多造成JVM没有及时回收,造成的内存溢出。如果出现这种现象可行代码排查:
一)是否App中的类中和引用变量过多使用了Static修饰 如public staitc Student s;在类中的属性中使用 static修饰的最好只用基本类型或字符串。如public static int i = 0; //public static String str;
二)是否App中使用了大量的递归或无限递归(递归中用到了大量的建新的对象)
三)是否App中使用了大量循环或死循环(循环中用到了大量的新建的对象)
四)检查App中是否使用了向数据库查询所有记录的方法。即一次性全部查询的方法,如果数据量超过10万多条了,就可能会造成内存溢出。所以在查询时应采用“分页查询”。
五)检查是否有数组,List,Map中存放的是对象的引用而不是对象,因为这些引用会让对应的对象不能被释放。会大量存储在内存中。
六)检查是否使用了“非字面量字符串进行+”的操作。因为String类的内容是不可变的,每次运行"+"就会产生新的对象,如果过多会造成新String对象过多,从而导致JVM没有及时回收而出现内存溢出。
如String s1 = "My name";
String s2 = "is";
String s3 = "xuwei";
String str = s1 + s2 + s3 +.........;这是会容易造成内存溢出的
但是String str = "My name" + " is " + " xuwei" + " nice " + " to " + " meet you"; //但是这种就不会造成内存溢出。因为这是”字面量字符串“,在运行"+"时就会在编译期间运行好。不会按照JVM来执行的。
在使用String,StringBuffer,StringBuilder时,如果是字面量字符串进行"+"时,应选用String性能更好;如果是String类进行"+"时,在不考虑线程安全时,应选用StringBuilder性能更好。
知道原因了,解决起来就非常简单了。
⑸ 怎样使用jstack诊断Java应用程序故障
如果单靠通过查看代码是很难去发现这个问题,在这一次故障排查中,我也学到了怎样更好的使用jvm监控工具来进行诊断,主要用到了jstack和jmap命令,jmap上次已经讲过就不再讲了,下面就一个例子来讲怎么使用jstack来对的Java程序进行诊断。
首先让我们来了解一下jstack这个命令的作用,jstack 是一个可以返回在应用程序上运行的各种各样线程的一个完整转储的实用程序,您可以使用它查明问题。jstack [-l] <pid>,jpid可以通过使用jps命令来查看当前Java程序的jpid值,-l是可选参数,它可以显示线程阻塞/死锁情况。
/**
* 死锁例子
* @author crane.ding
* @since 2011-3-20
*/
public class DeadLock {
public static void main(String[] args) {
final Object obj_1 = new Object(), obj_2 = new Object();
Thread t1 = new Thread("t1"){
@Override
public void run() {
synchronized (obj_1) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {}
synchronized (obj_2) {
System.out.println("thread t1 done.");
}
}
}
};
Thread t2 = new Thread("t2"){
@Override
public void run() {
synchronized (obj_2) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {}
synchronized (obj_1) {
System.out.println("thread t2 done.");
}
}
}
};
t1.start();
t2.start();
}
}
以上DeadLock类是一个死锁的例子,假使在我们不知情的情况下,运行DeadLock后,发现等了N久都没有在屏幕打印线程完成信息。这个时候我们就可以使用jps查看该程序的jpid值和使用jstack来生产堆栈结果问题。
$ java -cp deadlock.jar DeadLock &
$
$ jps
3076 Jps
448 DeadLock
$ jstack -l 448 > deadlock.jstack
结果文件deadlock.jstack内容如下:
2011-03-20 23:05:20
Full thread mp Java HotSpot(TM) Client VM (19.1-b02 mixed mode, sharing):
"DestroyJavaVM" prio=6 tid=0x00316800 nid=0x9fc waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"t2" prio=6 tid=0x02bcf000 nid=0xc70 waiting for monitor entry [0x02f6f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.demo.DeadLock$2.run(DeadLock.java:40)
- waiting to lock <0x22a297a8> (a java.lang.Object)
- locked <0x22a297b0> (a java.lang.Object)
Locked ownable synchronizers:
- None
"t1" prio=6 tid=0x02bce400 nid=0xba0 waiting for monitor entry [0x02f1f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.demo.DeadLock$1.run(DeadLock.java:25)
- waiting to lock <0x22a297b0> (a java.lang.Object)
- locked <0x22a297a8> (a java.lang.Object)
Locked ownable synchronizers:
- None
"Low Memory Detector" daemon prio=6 tid=0x02bb9400 nid=0xa6c runnable [0x00000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"CompilerThread0" daemon prio=10 tid=0x02bb2800 nid=0xcb8 waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Attach Listener" daemon prio=10 tid=0x02bb1000 nid=0x7f4 waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Signal Dispatcher" daemon prio=10 tid=0x02bd2800 nid=0xd80 runnable [0x00000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Finalizer" daemon prio=8 tid=0x02bab000 nid=0xe1c in Object.wait() [0x02d3f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x229e1148> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
- locked <0x229e1148> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
Locked ownable synchronizers:
- None
"Reference Handler" daemon prio=10 tid=0x02ba6800 nid=0xbe0 in Object.wait() [0x02cef000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x229e1048> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <0x229e1048> (a java.lang.ref.Reference$Lock)
Locked ownable synchronizers:
- None
"VM Thread" prio=10 tid=0x02b6a400 nid=0x568 runnable
"VM Periodic Task Thread" prio=10 tid=0x02bc8400 nid=0x75c waiting on condition
JNI global references: 878
Found one Java-level deadlock:
=============================
"t2":
waiting to lock monitor 0x02baaeec (object 0x22a297a8, a java.lang.Object),
which is held by "t1"
"t1":
waiting to lock monitor 0x02baa2bc (object 0x22a297b0, a java.lang.Object),
which is held by "t2"
Java stack information for the threads listed above:
===================================================
"t2":
at com.demo.DeadLock$2.run(DeadLock.java:40)
- waiting to lock <0x22a297a8> (a java.lang.Object)
- locked <0x22a297b0> (a java.lang.Object)
"t1":
at com.demo.DeadLock$1.run(DeadLock.java:25)
- waiting to lock <0x22a297b0> (a java.lang.Object)
- locked <0x22a297a8> (a java.lang.Object)
Found 1 deadlock.
从这个结果文件我们一看到发现了一个死锁,具体是线程t2在等待线程t1,而线程t1在等待线程t2造成的,同时也记录了线程的堆栈和代码行数,通过这个堆栈和行数我们就可以去检查对应的代码块,从而发现问题和解决问题。
⑹ Java 命令提示符问题
首先在命令提示符中输入javac回车,看一下有没有一些提示,接着在命令提示符中输入Java回车,再看一下有没有提示。如果上面都没问题的话,就试一下这个
⑺ JAVA高手请进,关于命令“JAVA”编译器错误的问题
1、java.lang.ClassNotFoundException---这是关键,找不到类文件异常;
2、首先你要明白谁负责解释.class文件?是jre的bin 和lib,你看你的path路径和classpath路径,是不是少了jre的这两个文件;
3、写成这样的配置:
PATH=%JAVA_HOME%\bin; D:\Program Files\Java\jre6 \bin;
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;
4、jdk下面也有一个jre目录,这个基本是负责解释jdk的工具的,因为jdk大多数的工具也是java开发的,还有安装时最好把jdk和jre放在同一个目录下,好的习惯。
⑻ JDK执行JAVA命令时的遇到的问题
你需要确定以下几个事情:
第一、系统变量是否设置正确。如果之前你能编译成功,而又没有做任何修改的话,那这一关你过了。
第二、确定文件的路径有没有错误。
第三、大小写有没有错误。
第四、注意特殊符号。
⑼ 在CMD下用java命令出现“找不到或无法加载主类”问题
有两种办法:
(1)把java类上的package去掉,直接运行命令java hello
//packagecom.tt.demo;//去掉
publicclasshello{
publicstaticvoidmain(String[]args){
System.out.println("HelloWorld!");
}
}
(2)如果保留带有package的原代码不改,则在java目录下运行java命令。如
hello.java在我本地硬盘上目录:E:myemo(项目名)srcmainjavacom tdemo 下
javac目录运行成功后,切换到目录E:myemo(项目名)srcmainjava下,运行命令:
java com.tt.demo.hello
packagecom.tt.demo;
publicclasshello{
publicstaticvoidmain(String[]args){
System.out.println("HelloWorld!");
}
}
参考:java命令:java命令错误: 找不到或无法加载主类
⑽ java项目上线前程序没问题,上线后出bug,怎么排查错误
看tomcat下的日志 会抛出异常