工作之经验之谈2

  1. log.isDebugEnabled() 判断日志级别的bug是否能执行。在执行log.debug(msg.toString()) 代码的时候,会先计算debug()括号内的内容,然后再去判断是否符合级别,

    如果级别不够,不需要记录日志,会导致计算资源的浪费。

  2. 如果程序在疯狂的打印日志,也会导致CPU内存达100%.

  3. 在while(true){} 进行循环执行某段代码时,如果不满足条件的情况下什么都不执行。那么,一定要使暂停一定时间,否则有可能,程序会疯狂的执行,占用%100的cpu。

  4. 通过top找到哪个程序占用CPU最多,在通过ps –ef|grep pid 来找到具体程序,然后调试。

  5. 完善的日志信息:自己处理的模块有进入信息的数据和下发信息的数量,各种产品的数据量。用以证明自己没错。

  6. AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。 而

    AtomicInteger则通过一种线程安全的加减操作接口。

  7. 从队列中取出消息,准备发送时,注意判断发送是否成功,如果失败需要将信息从新放回队列,避免信息丢失。

  8. 选择CRT上面的页面名称 -- > 右键 -- > Session Options --> Apperance --> Character encoding 中选择编码方式,可以修改当前窗口的编码方式,之后操作显示的内容的

    编码方式即为修改后的编码方式。

  9. 使用XJad可以反编译class文件为java文件,然后压缩为zip包,再关联到Eclipse中,即可看源码。用于一些没有源码或源码更改的代码。

  10. 在Tomcat中配置的log4j.properties 的相对目录是相对Tomcat的bin目录。可以通过设置绝对路径来更改日志位置。

  11. 把程序中的一些内容写到配置文件中,一般可采用绝对路径,直接定位到某一位置。

  12. 标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。kill -9 pid 强制终止。?

  13. 使用URLEncoder和URLDecoder处理编码

  14. java.io.IOException: No space left on device 内存空间不足,可能是日志或其他什么文件太多。通过df查看空间使用情况。

  15. 线程的上下文切换带来的cpu开销很大

  16. 通过visualVM监控代码运行情况,查看线程中的blocked,确定代码在哪阻塞了。

  17. 测试代码中,想确定某段代码中哪个地方影响效率。可以把代码提取出来,组成一个方法,原代码不变(包括怀疑的代码)。然后将新方法添加到执行代码中,通过不断注释代码中的内容,

    来确定哪段代码出问题。

  18. CRT连接界面可以重命名,我们可以以此来标注多个界面分别连接的是哪个内网IP或操作界面。

  19. 服务器的端口是用来的接收数据的,当服务往外发送数据时,走的是另外的端口。

  20. 一次连接中只有两个端口,例如:客户端 A 端口向服务端B端口发送信息,那么服务端再向客户端回复信息时,走的也是A端口和B端口。但如果服务端主动向客户端发送信息,

    那么走的就不是B端口,B端口是用来监听的。同样,客户端也不是A端口接收,客户端有其他端口来去监听过来的请求。

  21. 备份数据:将数据备份两份,最好备份到不同的服务器上,防止意外情况。

  22. 通过yum grouplist可以查看安装好的程序组和可以安装的程序组。

  23. 通道映射访问时,本地需要使用localhost或者127.0.0.1 ,不要使用本地IP。因为通道中本地端口只会映射到一个IP上,即localhost , localhost对应127.0.0.1

  24. BufferedOutputStream 效率要比FileOutputStream快很多

  25. 日志,详细的日志记录。开发是我们可以把日志级别定位debug,在项目中加入一些debug级别的日志。项目正式发布时,将日志级别改为info,那样就不用去删除每一个日志代码了

  26. linux 上发布项目,如果代码中异常没有捕获,那么日志信息会在nohup.out 打印出来。

  27. Too many open files经常在使用linux的时候出现,大多数情况是您的程序没有正常关闭一些资源引起的,所以出现这种情况,请检查io读写,socket通讯等是否正常关闭。

  28. 如果代码出了问题,在所有可疑的地方加上日志记录,再测试,争取一次找到问题。

  29. JAVA代码中数据库字段一般设置为常量形式,多处使用防止写错误。

  30. 若一个linux用户(假设为aceway)没有上传文件的权限,root用户可以新建一个目录,赋予它所有人的读写权限。这样aceway用户就可以通过这个目录上传文件了。