存档

作者存档

【内训】误删日志恢复及运行目录确定

2014年1月26日 没有评论

内训1:误删日志恢复及运行目录确定。

case 1:
运行着的服务产生的日志,被误删除,怎么找回来。
步骤:
1、先用top或ps找到服务的进程编号:pid
2、xxxxx代表找到的那个pid,找到它下面对应的被删除但还被占用的文件,lsof -p xxxxx | grep deleted
3、在输出结果中,找到日志所在的那一行,找到第四列的数值,比如:115w,假设此值为yyy即115
4、查看相应的日志文件:cat /proc/xxxxx/fd/yyy
或者输出到另一文件:cat /proc/xxxxx/fd/yyy > /tmp/zzz.log
完成。

case 2:
有多个雷同进程,看不出来其所在目录,比如下面这个

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                              
 8669 root      20   0 3345m 507m  11m S  0.0  3.2  56:53.80 java -cp .:./../lib/*:./../bin -server -Xmx1024m -Xms1024m 

步骤:
1、先用top或ps找到服务的进程编号xxxx,比如:8669
2、看lsof的cwd的NAME,一般在标题下的第一行:lsof -p xxxx | head -n 2
还可以用更傻一些的方法:lsof -p xxxx | grep cwd
最后那个NAME列对应的值就是这个进程的工作目录。
更多内容…

分类: 工作 标签: , ,

MySQL类型长度误区

2014年1月14日 没有评论

今天又碰到这种疑问,老调重弹,记录一下:
1、数值类型中指定的长度仅用于展示,不是值域限制。值域限制仅与类型及是否带符号有关,具体如下:
类型 字节 最小值 最大值
(带符号的/无符号的) (带符号的/无符号的)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615

2、字符串类型中(char和varchar),指定的长度为字符数,不是字节数,与列的字符集有关。
比如:MySQL必须为一个CHAR(10) CHARACTER SET utf8列预备30个字节,因为这是可能的最大长度。而VARCHAR(10)是动态的,只占1+3*实际字符数。

分类: 工作 标签: , , , ,

Android的https请求有机率连接失败

2014年1月7日 没有评论

很久之前的问题,印象中写过blog存档,今天翻了一下,发现没了,只能按记忆写一下,当初抓的包和分析的几种case也丢了。

问题:Android客户端访问https服务的时候,机率性连接失败,然后忽然在某个时候成功(大概是卡了十分钟以后)。iPhone客户端正常。
想当然的会认为是Android客户端层面的问题,因为iPhone正常。

分析过程:抓包发现Android的tcp报文带了TS(timestamp),而iPhone没带。
处理结果:把第一层反向代理上的timestamp关掉,以解决此问题。
更多内容…

分类: 工作 标签: , , ,

JavaApplication进程不自动结束

2014年1月6日 没有评论

今天发现线上一台服务器上一个用crontab周期性执行的Java Application同时存在多个进程。
细查了一下,发现相应的任务执行完成后,进程未终止。
因为代码中有大量线程的使用,怀疑是有用户线程(非守护线程)在运行。
遍历了一下,把所有的new Thread后都加上或改成置为守护线程:

                Thread thread = new Thread(r);
                thread.setDaemon(true);

关于thread.setDaemon的说明如下,大意是当前所有的线程都是守护线程时,进程结束。

void java.lang.Thread.setDaemon(boolean on)

Marks this thread as either a daemon thread or a user thread. The Java Virtual Machine exits when the only threads running are all daemon threads. 

This method must be called before the thread is started. 

This method first calls the checkAccess method of this thread with no arguments. This may result in throwing a SecurityException (in the current thread). 

Parameters:
on if true, marks this thread as a daemon thread.
Throws:
IllegalThreadStateException - if this thread is active.
SecurityException - if the current thread cannot modify this thread.
See Also:
isDaemon()
checkAccess

改完后测试,问题依旧。
更多内容…

MySQL的状态[HY000]错误码[1271]

2013年12月27日 没有评论

一个in的查询语句(select * from xxtable where c_name in (?,?,?,?)),出了这个错误。
到官网上搜一了圈,得到的说明只有这些:

错误:1271 SQLSTATE: HY000 (ER_CANT_AGGREGATE_NCOLLATIONS)
消息:对于操作'%s',非法混合了校对。

Error: 1271 SQLSTATE: HY000 (ER_CANT_AGGREGATE_NCOLLATIONS)
Message: Illegal mix of collations for operation '%s'

对应的中英文地址分别为:
http://dev.mysql.com/doc/refman/5.1/zh/error-handling.html
http://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html
更多内容…

分类: 工作 标签: , , , ,

Java中void类型的问题

2013年12月25日 没有评论

项目中碰到一个问题,简单描述一下:
根据方法定义,自动生成相应的文档(不是javadoc,是非技术可读的),支持动态对其调用(Method.invoke),根据结果返回特定的序列化的结果。

目前支持的全是有返回值的。
今天出现一个无返回值的情形(void),以前从未考虑过void对应的返回具体是个嘛东东,void对象?一个特殊的东东?或者就简单的返回空指针。

另一个问题,void.class可以得到void的class,看起来应该是可以有对应的对象的。
更多内容…

分类: 工作 标签: ,