浏览 4664 次
锁定老帖子 主题:这算内存泄漏吗?如何找回丢失的内存?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-17
硬件:4 xeon cpu,4G内存 主要运行的软件有:oracle9i_64,vsftpd,两个tomcat(分别是jdk1.4,jdk1.5),telnet-server,cvs,mysql 目前的问题:运行oracle的存储过程结束后内存没有释放,目前没有运行任何特占内存的程序,但空余内存只剩20M左右,并且一直保持在20M左右。 top -b 结果如下:(放到excel里面按%mem排序了一下) top - 09:53:52 up 4 days, 15:15, 2 users, load average: 0.00, 0.00, 0.00 Tasks: 167 total, 1 running, 166 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0% us, 0.0% sy, 0.0% ni, 99.9% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 4038128k total, 4020404k used, 17724k free, 46488k buffers Swap: 2031608k total, 53156k used, 1978452k free, 3264428k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 19928 oracle 16 0 1309m 314m 34m S 0 8 04:40.8 java 4812 oracle 16 0 1057m 245m 243m S 0 6.2 00:42.4 oracle 4814 oracle 16 0 1057m 245m 243m S 0 6.2 00:42.5 oracle 5849 oracle 16 0 558m 207m 15m S 0 5.2 02:19.0 java 4820 oracle 16 0 1056m 61m 60m S 0 1.6 00:07.7 oracle 4818 oracle 16 0 1056m 26m 24m S 0 0.7 00:05.3 oracle 20063 oracle 16 0 1056m 24m 22m S 0 0.6 00:00.7 oracle 5672 gdm 16 0 157m 14m 8136 S 0 0.4 00:00.9 gdmgreeter 20870 oracle 15 0 1056m 17m 16m S 0 0.4 00:00.0 oracle 4248 root 16 0 25080 11m 1532 S 0 0.3 00:05.3 hald 4816 oracle 16 0 1060m 11m 10m S 0 0.3 00:32.9 oracle 4822 oracle 16 0 1055m 12m 11m S 0 0.3 00:00.0 oracle 4860 mysql 16 0 33400 13m 2632 S 0 0.3 00:00.1 mysqld 4861 mysql 16 0 33400 13m 2632 S 0 0.3 00:00.0 mysqld 4862 mysql 20 0 33400 13m 2632 S 0 0.3 00:00.0 mysqld 4863 mysql 16 0 33400 13m 2632 S 0 0.3 00:00.0 mysqld 4864 mysql 17 0 33400 13m 2632 S 0 0.3 00:00.0 mysqld 4865 mysql 20 0 33400 13m 2632 S 0 0.3 00:00.0 mysqld 4867 mysql 16 0 33400 13m 2632 S 0 0.3 00:00.0 mysqld 4868 mysql 16 0 33400 13m 2632 S 0 0.3 00:00.0 mysqld 4869 mysql 16 0 33400 13m 2632 S 0 0.3 00:00.0 mysqld 4870 mysql 16 0 33400 13m 2632 S 0 0.3 00:00.3 mysqld 5568 root 15 0 58896 11m 2480 S 0 0.3 00:20.3 X 20672 mysql 16 0 33400 13m 2632 S 0 0.3 00:01.2 mysqld 20860 mysql 16 0 33400 13m 2632 S 0 0.3 00:00.0 mysqld 4600 oracle 17 0 104m 8008 4964 S 0 0.2 00:00.3 dbsnmp 4810 oracle 16 0 1056m 9548 8632 S 0 0.2 00:06.9 oracle 4824 oracle 16 0 1056m 7944 7092 S 0 0.2 00:00.0 oracle 4826 oracle 16 0 1056m 8504 7044 S 0 0.2 00:00.0 oracle 4102 root 16 0 28964 2432 1008 S 0 0.1 00:01.4 sendmail 4153 htt 18 0 36176 3384 2740 S 0 0.1 00:00.0 htt_server 4458 oracle 16 0 26848 4468 3416 S 0 0.1 00:00.1 tnslsnr 4897 root 15 0 91188 2920 2332 S 0 0.1 00:00.0 gdm-binary 5563 root 16 0 102m 2604 1908 S 0 0.1 00:00.0 gdm-binary 9545 root 16 0 72164 2212 1636 S 0 0.1 00:00.0 cupsd 20931 oracle 15 0 7308 996 708 R 2 0 00:00.0 top 1 root 16 0 5784 588 488 S 0 0 00:02.0 init 后面的进程%mem都是0了, %mem 相加 只有 35.5% 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-17
我给你一个公式:
物理内存 + 占用的swap = 空闲物理内存 + Memory buffer + Disk Cache + 使用掉的驻留内存 4G + 53MB = 17MB + 46MB + 3.2GB + ? 所以使用掉的驻留内存差不多有700-800MB 再累计你top出来那些进程的驻留内存数量,应该是八九不离十的。 从你的操作系统的性能数据来看,物理内存还空闲的很,大部分物理内存被操作系统用做disk cache,可能你的系统IO还是稍微有点频繁的。swap也占用了一点,说明操作系统曾经出现过短暂的内存吃紧的状况,把一些闲置进程换到了swap上去了,而这些闲置进程一直也没有再被使用到过,所以一直待在swap里面没有出来过。 |
|
返回顶楼 | |
发表时间:2007-04-20
惭愧,对linux的内存使用完全没有概念。
看了几篇文章,目前只能理解到:应用程序的角度来说,可用内存=系统free memory+buffers+cached 怀疑内存问题是因为一个tomcat5.0 设置 -server -Xms256m -Xmx1024m 根本没有成功,很容易造成outOfMemory,看来还是设置CATALINA_OPTS没生效的原因 |
|
返回顶楼 | |