项目里有这样的要求,用户通过浏览器配制一部分信息,这部分信息不存在数据库而存在LINUX下磁盘文件中。对我来说倒是没有什么区别,不就是数据嘛,怎么存不用我管,我只要能塞进去取出来就可以了。然而在运行的时候出现了两个问题
1.中文信息出现了乱码
2.file too many open
一、分析:
1.出现乱码就只能是编码的问题了,有可能有两种情况,一种是编码不一致,另一种是不支持设置的编码,因为我在项目里面都是用UTF8的编码,所以不存在设置了不支持的编码的问题,因此推断出是系统编码引起的。linux 下输入export |grep LANG 结果是en 果然如此。
2.上网查找资料得到结果是文件打开数太多超过了系统的默认值1024,但是我怎么可能同时打开1024个文件呢,这就和JVM有关了,我们都知道,JAVA的资源是靠GC来回收的,这样一来我们JAVA程序员不用处理大量有关资源回收的问题了,内存泄露的机会也少了很多,但是却不能强制GC回收,JVM给了建议回收的方法,但是处理不处理可不是我们说了算的,事情都有两面性,我们得到GC便利的同事也受到了其限制。网上说把文件打开数量增大就可以了。可能是内存里面有1千个你GC不回收但是如果你有5千个呢,你还不回收?呵呵,改过8K之后是没有出现问题了,当然网上还有同志说改1W多的。我的逻辑是用多少我就给多少再多点,呵呵。linux 下用 ulimit -n 就可以看到你设置的数目了。
二、初步解决方式:
1.Runtime 系统命令 ulimit -n 8196
2.Runtime 系统命令 export LANG="en_US.UTF-8"
本来以为解决了,但是问题依然存在为什么呢?程序里面设置完之后马上又查询了一遍,竟然没有设置上?奇怪?没出现问题呀,问了下公司搞linux开发的同事原来这些是进程相关的,我也没有启动新的进程呀,哦,一定是Runtime.getRuntime().exec() 它启动了一个新的进程。查资料如下:
在单独的进程中执行指定命令和变量。(jdk api 1.6.0 中文版exec()方法说明)
看样子在程序中解决问题是不现实了,那么只能修改配置文件了。修改那个文件了,google下看看,哇,修改好多文件都可以呀,为什么修改这多种类文件的方法都有呢?既然他们都写出来了说明都曾经解决过相应的问题。那么到底哪个才能适合我目前的问题呢?没有思路继续找资料,知道看到一篇关于linux 读取配置文件的顺序的文章才明白。
下面是的部分拷贝:
执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) ->
~/.bashrc -> /etc/bashrc -> ~/.bash_logout
关于各个文件的作用域,在网上找到了以下说明:
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc: 为每一个运行bash
shell的用户执行此文件.当bash shell被打开时,该文件被读取。
(3)~/.bash_profile:
每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5)~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc
/profile中的变量,他们是"父子"关系。
(6)~/.bash_profile 是交互式、login 方式进入 bash
运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
感谢博主整理,上面内容来源地址是:http://zcdxzsz.iteye.com/blog/280774
三、最终解决方案:
根据执行的顺序我们从后面往前面查找,发现有设置lang 和ulimit 的地方改过来就可以了,如果没有就在配文件中添加一个,我是在 ~/.bash_profile 中更改的
ulimit -n 8196
export LANG="en_US.UTF-8"
有人说在 /etc/sysconfig/i18n 里面更改编码方式,当然这样也可以,只是需要注意一点的是,不要被后面读取的配置文件的同样的属性把我们自己的设置的变量给覆盖了就好了。这也是为什么网上有那么多解决方法的原因了。
分享到:
相关推荐
总结来说,本文介绍了 Linux 中查看文件编码、文件编码转换和文件名编码转换的方法,并对 Vim 的编码方式设置做了详细的介绍。这些知识点对于解决 Linux 和 Windows 之间的文件编码问题非常重要。
linux基础 命令 shell编码 以及对linux理解 进程管理 文件管理 文件传输
1. **直接设置查看**:打开文件后,可以在Vim命令模式下输入`set fileencoding`来显示当前文件的编码设置。 - **显示文件编码方式**:此命令会显示文件的编码方式,这对于仅查看文件编码而不进行编辑非常有用。 ...
标题中的“基于ARM-Linux的旋转编码器接口与驱动程序的设计”是指在嵌入式系统中,使用ARM架构的处理器(如AT91RM9200)和Linux操作系统,为旋转编码器开发相应的硬件接口电路和软件驱动程序。旋转编码器是一种用于...
### Linux内核编码规范知识点详解 #### 一、概述 Linux内核编码规范是一套针对Linux内核开发的标准,旨在确保代码的一致性、可读性和可维护性。这套规范覆盖了从基本的代码风格到高级的设计模式等多个层面,对于...
Linux内核编码风格指的是在编写Linux内核代码时应遵循的一系列约定和格式规范。由于Linux内核是用C语言编写的,其编码风格遵循了C语言社区的传统习惯,同时根据性能和可读性的需要做了一些调整。这些规则被Linux内核...
### Linux字符集编码指南 #### 一、引言 在多语言环境中,字符编码的转换是必不可少的一个环节。尤其是在Linux环境下,由于其广泛的应用场景和灵活性,字符编码问题显得尤为重要。本文将详细介绍如何在Linux系统中...
在Linux系统中,查看文件编码是一项非常基础但重要的任务,特别是在处理文本文件、脚本或者进行跨平台数据传输时。本文将深入探讨如何在Linux环境下识别和检查文件的字符编码,以便正确理解和处理这些文件。 首先,...
在"linux下6410平台视频硬编码示例"中,"h264_env_linux"可能是一个包含示例代码或者配置文件的压缩包,用于演示如何在Linux环境下设置和使用MFC进行H.264编码。这个压缩包可能包括以下内容: 1. **驱动源码**:...
Linux内核编码风格(译文)[整理].pdf
Linux 下 Oracle 中文乱码字符集设置 Linux 下的 Oracle 数据库在导入数据库时出现中文乱码问题,这是因为 Oracle 数据库中的字符集格式不支持中文。解决方法是通过修改字符集格式,将其修改成支持中文的格式,这样...
这是一款开源的音频编码程序——AAC,比较普通的编码算法而言,此程序编码效率高且稳定,对于开发音频通讯、视频会议等项目有参考借鉴意义。另,资源带说明文档和实例,通俗易懂。
LINUX下采集视频数据并编码为H264项目,通过测试,编码后的视频清晰流畅,编码后的.264文件可以通过VCL播放器播放,摄像头可以使用符合UVC规范的的USB摄像头来做测试,本人使用多线程,在环形缓冲队列,确保采集的...
linux下安装mysql,utf-8编码处理,以及远程连接
在本文中,我们将深入探讨如何在Linux环境下利用USB摄像头进行视频采集、编码和发送。这一技术广泛应用于视频监控、远程教育、在线会议等场景。首先,我们要了解的是基础概念: 1. **Linux与USB摄像头**:Linux操作...
标题中提到的“Linux编码文件”主要指的是与系统字符集设置相关的文件。在Linux中,这些文件通常位于`/usr/lib/locale`目录下。此目录包含了系统支持的所有字符集信息,使得系统能够正确显示和处理不同语言的文本。 ...
Linux内核编码风格,编程代码风格,大家可以参考学习一下。