LINUX
linux中的inode简单介绍
Linux会为每一个文件分配一个唯一的inode节点。在linux中,文件的文件名、文件属性、文件内容是分别存储的:文件名存放在目录项(即 dentry)中,文件属性存放在inode中,文件内容存放在block中。Linux在查找文件时,首先先读取dentry,dentry中存储的文 件名和inode编号的一个映射表, 根据这个表找到inode编号,再根据inode找到磁盘中的文件。
Understand UNIX / Linux Inodes Basics with Examples
An Inode number points to an Inode. An Inode is a data structure that stores the following information about a file :
- Size of file
- Device ID
- User ID of the file
- Group ID of the file
- The file mode information and access privileges for owner, group and others
- File protection flags
- The timestamps for file creation, modification etc
- link counter to determine the number of hard links
- Pointers to the blocks storing file’s contents
$ stat DW.txt
File: `DW.txt’
Size: 24908 Blocks: 56 IO Block: 4096 regular file
Device: ca01h/51713d Inode: 15696241 Links: 1
Access: (0664/-rw-rw-r–) Uid: ( 505/ admin) Gid: ( 505/ admin)
Access: 2011-11-03 18:45:29.000000000 +0800
Modify: 2011-11-03 18:38:33.000000000 +0800
Change: 2011-11-03 18:38:33.000000000 +0800
Linux Performance Monitoring and Tuning Introduction
UNIX Process Overview (Inside a Linux Process, and Types of Process)
7 Practical PS Command Examples for Process Monitoring
List Currently Running Processes (ps -ef, ps -aux)
List the Process based on the UID and Commands (ps -u, ps -C)
ps -f -u wwwrun,postfix
ps -f -C tatad.pl
List the processes based on PIDs or PPIDs (ps -p, ps –ppid)
ps -f –ppid 9576
ps -f -p 25009,7258,2426
List Processes in a Hierarchy (ps –forest)
ps -e -o pid,args –forest
List all threads for a particular process (ps -L)
ps -C java -L -o pid,tid,pcpu,state,nlwp,args
Finding memory Leak (ps –sort pmem)
ps aux –sort pmem
6 Stages of Linux Boot Process (Startup Sequence)
Bg, Fg, &, Ctrl-Z – 5 Examples to Manage Unix Background Jobs
Executing a background job
Appending an ampersand ( & ) to the command runs the job in the background.
Sending the current foreground job to the background using CTRL-Z and bg command
Kill a specific background job using kill %
kill %2
Linux / Unix Command: ps
Linux下ps命令详解
linux上进程有5种状态:
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
ps工具标识进程的5种状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 不可中断的静止
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
PS命令常用用法
ps a 显示现行终端机下的所有程序,包括其他用户的程序。
ps -A 显示所有程序。
ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
ps -e 此参数的效果和指定"A"参数相同。
ps e 列出程序时,显示每个程序所使用的环境变量。
ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
ps -H 显示树状结构,表示程序间的相互关系。
ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
ps s 采用程序信号的格式显示程序状况。
ps S 列出程序时,包括已中断的子程序资料。
ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
ps u 以用户为主的格式来显示程序状况。
ps x 显示所有程序,不以终端机来区分。
最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。
Investment
【经济周期六个阶段】第1阶段经济下滑期:仅有债券是牛市。第2阶段:仅有商品是熊市。第3阶段经济复苏期:都是牛市。第4阶段:只有债券是熊市。第5阶段:只有商品是牛市。第6阶段经济滞胀期:都是熊市
JAVA
JVM -XX: 参数介绍
Understanding JVM Internals
Master/worker or P2P Grid? How about You choose?
JPPF
JPPF makes it easy to parallelize computationally intensive tasks and execute them on a Grid.
CPU 占用过高 (查看Java堆)
常用的Linux系统监控命令
nid : 对应的linux操作系统下的tid
tid: 这个应该是jvm的jmm内存规范中的唯一地址定位,如果你详细分析jvm的一些内存数据时用得上
Programming
再读《重构》
重构的意义之一也是提高开发进度。杀手锏是”不要告诉经理“。
The benefits of reducing memory consumption
Working set size
Subversion Tip of the Week-Recovering Deleted Items
svn log –verbose
This will list all of the changed items in each revision, allowing you to pinpoint the revision where you deleted the file.
svn merge {revision number}
svn copy {revision number}
SOA
服务治理过程演进
服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。
其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阀值,记录此时的访问量,再以此访问量乘以机器数反推总容量。
服务多了,沟通成本也开始上升,调某个服务失败该找谁?服务的参数都有什么约定?
这时就需要登记每个服务都是谁负责的,并建立一个服务的文档库,方便检索。
慢慢一些敏感数据也都服务化了,安全问题开始变得重要,谁能调该服务?如何授权?
这样的服务可能需要一个密码,访问时需带着此密码,但如果用密码,要改密码时,就会很不方便,所有的消费方都要改,所以动态生成令牌(Token)可能会更好,提供方将令牌告之注册中心,由注册中心决定是否告之消费方,这样就能在注册中心页面上做复杂的授权模型。
就算是不敏感的服务,也不是能任意调用,比如某服务突然多了一个消费者,这个消费者的请求量直接把服务给拖跨了,其它消费者跟着一起故障。
首先服务提供方需要流控,当流程超标时,能拒绝部分请求,进行自我保护。
其次,消费者上线前和提供者约定《服务质量等级协定(SLA)》,SLA包括消费者承诺每天调用量,请求数据量,提供方承诺响应时间,出错率等,将SLA记录在监控中心,定时与监控数据对比,超标则报警。
虽然有SLA约定,如果不能控制,就只是君子协定,如何确保服务质量?
比如:一个应用很重要,一个不那么重要,它们调用同一个服务,这个服务就应该向重要应用倾斜,而不是一视同仁,当支撑不住时,应限制不重要应用的访问,保障重要应用的可用,如何做到这一点呢。这时,就需要服务路由,控制不同应用访问不同机器,比如:
应用分离:
consumer.application = foo => provider.host = 1,2,3
consumer.application != foo => provider.host = 5,6
读写分离:
method.name = find*,get* => provider.host = 1,2,3
method.name != find*,get* => provider.host = 5,6
随着服务的不停升级,总有些意想不到的事发生,比如cache写错了导致内存溢出,故障不可避免,每次核心服务一挂,影响一大片,人心慌慌,如何控制故障的影响面?服务是否可以功能降级?或者资源劣化?
应用间声明依赖强度,哪些功能强依赖,哪些弱依赖,然后基于依赖强度,计算出影响面,并定期测试复查,加强关键路径上的服务的优化和容错,清理不该在关键路径上的服务。