linux系统下memcached启动正常但程序无法连接的问题解决
在虚拟机linux安装好memcached之后,试着用java程序连接一下memcached的服务端,但却出现了以下错误
com.schooner.MemCached.SchoonerSockIOPool Fri Jan 09 09:45:59 CST 2015 - ++++ failed to get SockIO obj for: 192.168.168.2:11211
com.schooner.MemCached.SchoonerSockIOPool Fri Jan 09 09:45:59 CST 2015 - ++++ failed to create connection to: 192.168.168.2:11211 -- only 0 created.
提示无法建立memcached的connection和SockIO,用ps -ef|grep memcached 命令查看memcached进程
nobody 1871 1 0 08:40 ? 00:00:00 /usr/local/memcached-1.4.17/bin/memcached -d -p 11211 -u nobody -m 64 -c 1024 -P /usr/local/memcached-1.4.17/memcached.pid
说明memcached服务启动正常,难道无法连接虚拟机,这不太可能啊,打开cmd命令,ping 192.168.168.2
虚拟机连接正常啊,那就可能是端口出现了问题,telnet 192.168.168.2. 11211
端口11211连接失败,果然是端口出现了问题。
于是在网上查了一下,原来是由于linux的iptables防火墙原因,需要在iptables里开放11211端口的访问权限,
用ssh客户端连接虚拟机,找到目录/etc/sysconfig下iptables文件,下载下来,用记事本打开
# Generated by iptables-save v1.4.7 on Thu Jan 8 13:46:05 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [59:6824]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Jan 8 13:46:05 2015
发现只有一个22端口,怪不得可以直接使用ssh client连接虚拟机,原来iptables默认是开放22端口的,照葫芦画瓢,copy22端口的那行代码,端口改为11211,
# Generated by iptables-save v1.4.7 on Thu Jan 8 13:46:05 2015
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [59:6824]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 11211 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Jan 8 13:46:05 2015
Ctrl+S,保存,上传,执行命令 service iptables restart
重回cmd窗口,telnet 192.168.168.2 11211
OK,端口连接成功。
在MyEclipse执行java程序
public class Mycache { /**
* @param args
*/
@SuppressWarnings("deprecation")
public static void main(String[] args) { MemCachedClient client = new MemCachedClient();
String[] addrs = {"192.168.168.2:11211"};
Integer [] weights = {3}; //SockIOPool是Memcached客户端提供的一个套接字 连接池,通俗讲,就是与Memcached服务器端交换数据的对象。
//SockIOPool在应用程序启动时初始化一次就可以了
SockIOPool pool = SockIOPool.getInstance();
pool.setServers(addrs);
pool.setWeights(weights);
pool.setInitConn(5);
pool.setMinConn(5);
pool.setMaxConn(200);
pool.setMaxIdle(1000*30*30);
pool.setMaintSleep(30);
pool.setNagle(false);
pool.setSocketTO(30);
pool.setSocketConnectTO(0);
pool.initialize();
System.out.println(pool.getServers()[0]);
//
// String[] s =pool.getServers();
client.setCompressEnable(true);
client.setCompressThreshold(1000*1024); // 将数据放入缓存
client.set("test2","test2"); // 将数据放入缓存,并设置失效时间
Date date=new Date(2);
client.set("test1","test1", date); TestBean bean = new TestBean();
bean.setName("bean1");
client.add("bean1", bean); TestBean bean1 = (TestBean)client.get("bean1");
System.out.println(bean1.getName()); // 删除缓存数据
// client.delete("test1"); // 获取缓存数据
String str =(String)client.get("test1");
System.out.println(str);
// System.out.println(s.length); } }
输出结果:
memcached连接成功,大功告成!
ps:关于无法连接memcached的问题,网上还有一种可能情况就是linux的安全控制模块selinux的安全控制问题,具体可以在网上搜索。
工作三年多了。混了三年多,什么都不懂,linux也很少接触,原谅我连iptables都不熟悉吧。
linux系统下memcached启动正常但程序无法连接的问题解决的更多相关文章
- Linux系统下,启动Tomcat有时报Address already in use
一.Linux系统下,启动Tomcat有时报Address already in use<null>... 1.那是因为你的tomcat已经启动了tomcat自带的关闭脚本,有时候关闭看上 ...
- Redis 在 LINUX 系统下 安装, 启动
01, 下载 http://www.redis.cn/ , 这里下再下来的是 redis-4.0.1.tar.gz 这个压缩包 02, 将压缩包放到 linux 系统中, 一般放在 usr/lo ...
- Linux系统下Memcached的安装以及自启动
一.准备工作: 1.下载libevent:http://monkey.org/~provos/libevent/ (由于memcached与客户端的通信是借助libevent来实现的,所以此动作必须在 ...
- linux系统下开机启动流程
在了解开机启动流程之前,还是得先了解一些磁盘的基本知识.磁盘主要由盘片,机械手臂,磁头,主轴马达构成.盘片就是存储数据的物理单位了.然后盘片上我们可以分成扇区(sector)和柱面(cylinder) ...
- 【深入学习linux】在linux系统下怎么编写c语言程序并运行
1. 首先安装下 gcc : centos yum -y gcc 2. 编写c程序保存hello.c: #include <stdio.h> #include <stdlib.h&g ...
- qt linux系统下出现Qt5: Unknown module(s) in QT: serialport问题解决
需要单独安装这个模块, manjaro linux打开包管理器,搜索安装,就好了
- Linux系统下vi编辑器的一些简单使用操作
Linux系统安装vi编辑器 打开终端,输入: sudo apt install vim 然后输入Y等待安装即可 Linux系统下使用vi编辑器的使用 安装好vim后,终端中输入vim即可进入vim编 ...
- 不同linux系统添加开机启动程序的命令
see http://phpcj.org/blog/%E4%B8%8D%E5%90%8Clinux%E7%B3%BB%E7%BB%9F%E6%B7%BB%E5%8A%A0%E5%BC%80%E6%9C ...
- Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with
Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with 摘要 Li ...
随机推荐
- [转载]Matlab中fft与fftshift命令的小结与分析
http://blog.sina.com.cn/s/blog_68f3a4510100qvp1.html 注:转载请注明出处——by author. 我们知道Fourier分析是信号处理里很重要的技术 ...
- jdbc 日期 时间
//pstmt.setDate(1, new Date(new java.util.Date().getTime())); pstmt.setTime(1, new Time(new java.uti ...
- c++STL之sort排序
排序算法为竞赛中最常用的算法之一,我们可以利用C++自带的库函数进行排序. ...
- mysql查询优化技巧
索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)等等.这里记录的优化技巧更适合开发人员,都是从网络上搜集和整理的,主要是查询语句上的优化,其他层面上 ...
- ORACLE 绑定变量用法总结 .
之前对ORACLE中的变量一直没个太清楚的认识,比如说使用:.&.&&.DEIFINE.VARIABLE……等等.今天正好闲下来,上网搜了搜相关的文章,汇总了一下,贴在这里,方 ...
- SQL Server 造成cpu 使用率高的 6 原因
第一种: 编译和重编译执行计划. 第二种: 排序与聚合. 第三种: 表格连接操作. 第四种: max degree of parallelism. 第五种: max worker threads. 第 ...
- express源码分析---merge-descriptors
在express.js里 我们看到这样的代码: 顾名思义,我们知道是将proto,EventEmitter.prototype 上的属性复制一份给app上. 那它具体实现的原理是怎么样的? 'use ...
- SDK Manager 报错:Connection timed out: connect
安装Eclipse的安卓开发环境的时候,安装sdk时报错,出现: 解决办法: 1.选择左上角的Tools 2.选择Options,勾选下面红色框的东西 3. 4.重新重启一下sdk manager即可
- Codeforces #345 Div.1
Codeforces #345 Div.1 打CF有助于提高做题的正确率. Watchmen 题目描述:求欧拉距离等于曼哈顿距离的点对个数. solution 签到题,其实就是求有多少对点在同一行或同 ...
- atomic_compare_exchange
atomic_compare_exchange 分为两个版本 atomic_compare_exchange_strong 和 atomic_compare_exchange_weak,语义如下 bo ...