- 浏览: 10869 次
最新评论
文章列表
SQL UTC时间转换为可读的时间
- 博客分类:
- oracle笔记
select (select date '1970-01-01' + (to_number(f.SAVEDATE) / 86400000)
from dual) form_estimated_saveDate FROM xxx f;
最近遇到一个问题原本虚拟机分配了2G的堆大小,发现OS用top命令看,进程的VIRT内存一直增加,而且RES也一直往上增加,最后前者达到了16G,后者达到了8G,最后内存整个进程宕调
后来尝试重现问题,打了JAVA线程堆栈,发现堆栈里面大量的pool的线程,多达上万个。
就是有个人写代码,误用JAVA线程池,每次用都新new一个线程池ThreadPoolExecutor,
最后自己写代码测试,确实每次new会占用堆外堆存,没有跟踪到底层,但是线程池是管理线程的,虚拟机线程肯定是要跟OS申请线程资源的,linux中线程作为轻量进程,每fork一个肯定会占用OS的资源,相对于java虚拟机堆内内存 ...
1.1 jmap –heap PID命令
这个是打印java进程jvm内存分布跟使用情况,可以根据这个来分析是否需要导内存dmp来分析
1.2 部署MAT
1.2.1 配置
线程堆栈是个很强大的东西,可以看到进程正在运行的所有线程信息
1.1 kill -3 PID 命令
堆栈信息会打到进程的后台启动nohup.out的文件里面
1.2 jboss配置前台请求线程数:
jboss-4.2.3.GA/server/default/deploy/jboss-web.deployer/server.xml
<Connector port="17100" address="0.0.0.0"
maxThreads="250" strategy="ms" maxHt ...
import java.util.ArrayList;
import java.util.List;
public class WaitNotify extends Thread {
private String flag="false";
private List<String> list=new ArrayList<String>();
public static void main(String[] args) {
WaitNotify t = new WaitNotify();
...
suid(set User ID,set UID)的意思是进程执行一个文件时通常保持进程拥有者的UID。然而,如果设置了可执行文件的suid位,进程就获得了该文件拥有者的UID。
sgid(set Group ID,set GID)意思也是一样,只要把上面的进程拥有者改成进程组就好了。
如果一个文件被设置了suid或sgid位,会分别表现在所有者或同组用户的权限的可执行位上。
参见维基百科
http://en.wikipedia.org/wiki/Setuid
凡事都有个但是,suid不支持shell脚本,现在执行./excute.sh都不行,更不用说是excute.sh里面再去执 ...
linux 更倾向于使用分页方式,不怎么喜欢使用分段,
分段可以给美国进程分配不同的线性地址空间,分页可以把同一个线性地址隐射到不同的物理地址(这跟linlux的分页机制有关)
因为这样更容易跨平台,但是由于分段是硬件就支持的,linux还是使用了分段;
用户代码段
用户数据段
内核代码段
内核数据段
关注的Base字段都是0x00000000,G位为1,用户态的DPL为3(最小优先级),内核态的DPL为0(最高优先级)
G为粒度标志,1代表以4K为单位
这样不管是用户态以及内核态就能寻址2的32次方-1的地址,4G。
不管是用户态以及内核态的所有进程的逻辑地址是一样的。
这样linux ...
先梳理一下概念:
逻辑地址是由16位的段选择符和32位的偏移量组成;
段选择符是有13为的index,1位TI,2位RPL组成;
段选择符存在CPU的段寄存器中;
段描述符放在全局描述符标GDT或者局部描述符LDT中;
段描述符是8字节64位,里面有Base字段是该段的首字节的线性地址;
(notice)段描述符原始是存在GDT 或者 LDT中的,但是80x86处理器提供了一组非编程的CPU寄存器来存储该对应的段描述符。(这样就能每次不用访问主存中的GDT,只要CPU中的段寄存器的内容没有发生改变,可以直接从CPU的寄存器中直接获取段描述符,达到快速访问)
GDT的在主存中的首地址 ...