GVKun编程网logo

Linux中可用于应用程序的内存总量(linux中可用于应用程序的内存总量是)

12

在本文中,我们将带你了解Linux中可用于应用程序的内存总量在这篇文章中,我们将为您详细介绍Linux中可用于应用程序的内存总量的方方面面,并解答linux中可用于应用程序的内存总量是常见的疑惑,同时

在本文中,我们将带你了解Linux中可用于应用程序的内存总量在这篇文章中,我们将为您详细介绍Linux中可用于应用程序的内存总量的方方面面,并解答linux中可用于应用程序的内存总量是常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的Linux – /usr/local或/ var用于应用程序数据?、linux – 用于集成自定义Web应用程序的最佳文本搜索引擎?、Linux上用于Java / C ++应用程序的共享内存IPC的很好替代scheme、Linux上的多线程C应用程序中的内存泄漏

本文目录一览:

Linux中可用于应用程序的内存总量(linux中可用于应用程序的内存总量是)

Linux中可用于应用程序的内存总量(linux中可用于应用程序的内存总量是)

我正在编写一个 shell脚本,需要知道系统中可用(可免费回收)内存的总量.为此,我正在解析free命令的输出.免费的典型输出如下:
$free -m
             total       used       free     shared    buffers     cached
Mem:          2488        965       1523          0         83        517
-/+ buffers/cache:        363       2124
Swap:         1565          0       1565

通常认为由缓冲区和缓存校正的“空闲”列表示可以自由或可回收的内存,因此可用于应用程序.因此,在上面的示例中,我们将有大约2124 MB可用.

但是,如果正在使用tmpfs,这是不正确的,因为tmpfs使用的任何内存都包含在“缓存”中,但此内存不可回收(this article中的更多信息)

那么我们怎样才能找出实际可用的内存量?

解决方法

看起来获取可用内存量并不像“缓存空闲缓冲区 – shmem”那么容易.为了解决这个问题,Linux内核3.14引入了一个名为“MemAvailable”的新指标,它考虑了多个因素:

Currently,the amount of memory that is available for a new workload,
without pushing the system into swap,can be estimated from MemFree,
Active(file),Inactive(file),and SReclaimable,as well as the “low”
watermarks from /proc/zoneinfo.

更多信息可以在in the kernel commit message找到.

对于早于3.14的内核,there are tools可以以与内核计算方式相同的方式模拟此度量.

Linux – /usr/local或/ var用于应用程序数据?

Linux – /usr/local或/ var用于应用程序数据?

我正在开发一个需要存储一些数据的应用程序.我将它存储在/usr/local/myapp或/ var / lib / myapp中存在疑问.

哪个是最合适的目录?

解决方法

由于/ usr用于常量数据,而/ var用于可变数据,因此使用/ var存储这些数据.

并且,关于/usr/local /:通过在make文件中提供适当的变量,确保打包者可以选择将软件安装到/usr/lib / /usr/share / /usr/bin.

手动安装的软件(即make install等)应该在/usr/local/*中使用,而软件包装通过.rpm / .deb /应该避免/usr/local,并直接安装在/ usr中的相应文件夹下.

linux – 用于集成自定义Web应用程序的最佳文本搜索引擎?

linux – 用于集成自定义Web应用程序的最佳文本搜索引擎?

我们有一个Web应用程序,允许用户上传文档,创建自己的文档,等等.上传的文件存储在Amazon S3上,创建的信息存储在 MySQL数据库中.我正在寻找的是某种搜索引擎,我在其中提供所有文本文档,每个文档都有一个唯一的ID,并构建索引或其他任何内容.之后,我可以给它搜索查询,它会提取最匹配的文档(通过他们的ID),以及匹配文本的片段.

基本上我们希望允许我们的用户搜索他们上传的东西的存储库,以及其他用户标记为公开的任何内容.该解决方案应该在标准的Linux服务器上运行,理想情况下它应该是开源的,但如果价格不高,我也会考虑付费解决方案.

到目前为止,我发现了三个潜在候选人:

> MySQL Full Text Search – 我读过的一些报道说它很慢
> Apache Lucene – 不幸的是用Java编写,但如果必须的话,我会使用它.据说速度快
> Sphinx – 似乎并不那么受欢迎,理想情况下,无论我找到什么解决方案都会得到很多社区支持.

如果我有任何其他好的选择我忽略了,或者您有上述任何一个经验,请告诉我.

解决方法

看看 Solr.它基于Lucene,所以速度非常快,而且从任何平台上都可以轻松使用.

Linux上用于Java / C ++应用程序的共享内存IPC的很好替代scheme

Linux上用于Java / C ++应用程序的共享内存IPC的很好替代scheme

我目前使用Java和C ++应用程序之间的IPC共享内存,但寻找一个更方便的select。

有人可以build议一个更好的方法相同的性能和速度?

谢谢!

如何获取文件的下一页/部分/视图,如果我使用MapViewOfFile读取文件的一部分?

C,如何在分叉进程上使用POSIX信号量?

如何在Linux中使用共享内存

ipcs不显示我的共享内存和信号量

如何以及何时使用/ dev / shm来提高效率?

在Windows上自动replace内存映射

这是一个安全的方式与subprocess共享只读内存?

写共享内存的频率限制?

如何使用共享内存和信号量来实现pipe道?

指向共享内存段

这取决于您计划如何交互应用程序。 在POSIX环境中,您有管道,共享内存,套接字,信号量和消息队列。 看到这个问题: 比较unix linux IPC获取更多信息。

什么是您的流程(即客户/服务器,生产者,消费者等)的交互模式?

从个人经验来看,我会建议你最好的选择是管道(因为它们只是读取和写入字节的文件)或套接字(因为这两种语言都支持它们)。

正如米克隆所说,这很大程度上取决于你在做什么。 AFAIK,没有任何IPC方法有原生的Java绑定,所以你可能将不得不使用JNI并自己绑定,所以所有不同的方法大致同样困难。 如果你正在做消息传递,我强烈建议使用消息队列。 它们很容易使用(一旦你有绑定),并有良好的性能。 如果你需要“共享”一些资源,那么你可能要坚持共享内存。

因为听起来你有一些客户端/服务器的东西,我会说使用消息队列,UNIX域套接字或命名管道。 它们都涉及拷贝内核中的数据,所以它们不如共享内存那么快,但是它们仍然非常快。 如果你有类似消息的数据(个别的小包),去消息队列。 这可能是最干净的解决方案。 如果您有更多的数据流,请使用管道或套接字。 套接字的优点是,如果你愿意的话,你可以很容易地使它像网络一样透明(比如X11),但是比管道稍微难一些。 性能可能非常相似。

Java虽然可能不是最高效的,但它只支持开箱即用的插件(我记得最好的)。 他们非常灵活,也许没有其他选择那么快。 正如Zifre所说,它为您提供了网络透明度以及语言/绑定透明度的机会。 因为几乎所有的语言都支持现成的套接字库。

当我把效率从窗口扔出去的时候,如果你想把它提高到一个新的水平,你可以把它包装在某种Web服务中。 在消费者上使用嵌入式Web服务器,以便生产者提交他们的数据。

用不同语言编写的应用程序之间进行通信的最简单的方法是IMHO CORBA 。 那里有非常好的开源CORBA ORB 。 我们使用TAO的C + +和JacORB的Java。 还有像OCI和Remedy这样的公司提供技术支持。

我目前使用Java和C ++应用程序之间的IPC共享内存,但寻找一个更方便的选择。

有人可以建议更好的方法,但具有相同的性能速度?

对于简单的共享内存,你甚至不需要特殊的库:

class Main { private static class CustomThread extends Thread { public int x = 0; public void run() { x = 5; } } public static void main(String[] args) { CustomThread t = new CustomThread(); t.start(); System.out.println(tx); System.out.println(tx); } }

局部变量x可以在线程之外访问,允许您使用它来传递信息进出线程。

Linux上的多线程C应用程序中的内存泄漏

Linux上的多线程C应用程序中的内存泄漏

我们有一个在 Linux上运行的大型多线程C应用程序.我们看到应用程序内存占用的速度越来越快,并且相信存在一些泄漏.我们已经尝试了我们拥有的每一种工具(valgrind,DynLeak,Purify),但没有找到任何东西.由于此应用程序可以在Windows上运行,我们还尝试了Bounds Checker.也没有帮助.

我们需要一种可以提供帮助的新工具.我查看了Google Perfomrance Tools,MMGR by Paul Nettle,MemCheck Deluxe.他们都没有给我留下深刻印象.

这个任务有什么好的工具吗?

解决方法

C/C++中内存泄漏的定义非常具体:它是已分配的内存,然后指针被覆盖或以其他方式丢失. Valgrind通常会开箱即用,但事情并非总是如此简单.

>您的应用程序很可能仍在使用该内存.在这种情况下,您可能拥有Java程序员认为泄漏的内容,例如在结构中输入数据,很少(或从不)删除条目.
>您可能错误地测量了内存的内存使用情况.在Linux上,内存使用量测量并不像它们看起来那么简单.你是如何衡量你的内存使用量的?
>您应该考虑使用您正在使用的任何内存分析工具的应用程序挂钩(Valgrind称之为client requests),以避免报告仅在程序终止时发出的问题.使用这些钩子可能会帮助您精确定位泄漏的位置.
>您应该尝试使用堆分析器(例如Valgrind的massif)来查找具有过多分配内存量的内存分配位置.
>确保您的应用程序中没有使用自定义分配器或垃圾收集器.据我所知,没有user interference,没有内存分析工具可以使用自定义分配器.
>如果您的内存泄漏量足以在可接受的应用程序运行时间内检测到,您可以尝试通过版本控制系统对旧版本进行二进制搜索,以识别引入问题的提交.至少Mercurial
和Git为此任务提供内置支持.

关于Linux中可用于应用程序的内存总量linux中可用于应用程序的内存总量是的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Linux – /usr/local或/ var用于应用程序数据?、linux – 用于集成自定义Web应用程序的最佳文本搜索引擎?、Linux上用于Java / C ++应用程序的共享内存IPC的很好替代scheme、Linux上的多线程C应用程序中的内存泄漏等相关内容,可以在本站寻找。

本文标签: