小编ste*_*heg的帖子

无法使用jhat,jps,jstack调试Java Windows服务

我经常在Linux和Mac上向开发人员展示jhat,jps和jstack工具集.但是,一位开发人员最近表示,如果相关的Java应用程序作为Windows服务运行,则这些在Windows中无法使用.

一个太阳提交的bug说的非常相似,但由于不活动而被关闭.

我已经为自己测试了这一点,但事实上它似乎是正确的,尽管我几乎无法相信.这是设置:

  1. 使用"登录为"=="本地系统"作为Windows服务运行的Tomcat或类似程序
  2. 具有Admin权限的用户登录到同一台Windows计算机.
  3. 管理员打开Windows任务管理器,可以看到java.exe正在运行
  4. 管理员打开控制台,键入"jps",获取不包含Tomcat的java服务进程的进程列表.
  5. 作为强力尝试,从Windows任务管理器获取tomcat的PID作为服务.输入jstack <pid>.得到回复:<pid>没有这样的过程

这在Windows XP,Windows 2003 Server和Windows 7下可重现.Java版本1.5和1.6产生相同的结果.

有没有办法从终端,即使以管理员身份登录,"sudo up"获取JPS和其他工具来查看java服务?

java windows windows-services

13
推荐指数
2
解决办法
9298
查看次数

主持javadoc?

我有一个托管在bitbucket上的开源项目.Bitbucket不提供大量小文件(即javadoc)的托管.我在哪里可以发布javadocs?Javadoc必须是可浏览的,而不是单个存档.

java hosting open-source javadoc bitbucket

11
推荐指数
3
解决办法
4993
查看次数

Keychain和Mac OS Lion升级问题

从Snow Leopard升级到Lion后,我有时会弹出一个弹出窗口:

 syncdefaultsd wants to use the "login" keychain
Run Code Online (Sandbox Code Playgroud)

它会提示输入钥匙串密码.ps aux不显示任何名为syncdefaultsd的进程.Time Machine已关闭.iCloud已开启.该流程属于哪个应用程序?我怎样才能摆脱烦人的弹出窗口?

macos operating-system keychain osx-lion

7
推荐指数
1
解决办法
1万
查看次数

尽可能快地比较缓冲区

我需要比较两个缓冲区块以获得相等性.我不需要有关两个缓冲区关系的信息,只要两个块相等或不相等.我的intel机器支持SSE4.2

天真的方法是:

const size_t CHUNK_SIZE = 16; //128bit for SSE2 integer registers
const int ARRAY_SIZE = 200000000;

char* array_1 = (char*)_aligned_malloc(ARRAY_SIZE, 16);
char* array_2 = (char*)_aligned_malloc(ARRAY_SIZE, 16);

for (size_t i = 0; i < ARRAY_SIZE; )
{
    volatile bool result = memcmp(array_1+i, array_2+i, CHUNK_SIZE);
    i += CHUNK_SIZE;
}
Run Code Online (Sandbox Code Playgroud)

与我第一次尝试使用SSE相比:

union U
{
    __m128i m;
    volatile int i[4];
} res;

for (size_t i = 0; i < ARRAY_SIZE; )
{
    __m128i* pa1 = (__m128i*)(array_1+i);
    __m128i* pa2 = (__m128i*)(array_2+i);
    res.m = _mm_cmpeq_epi32(*pa1, …
Run Code Online (Sandbox Code Playgroud)

c windows sse

6
推荐指数
1
解决办法
2306
查看次数

Linux proc/pid/fd for stdout是11?

执行stdout重定向到文件的脚本.所以/ proc/$$/fd/1应指向该文件(因为stdout fileno为1).但是,文件的实际fd是11.请解释,为什么.

这是会议:

$ cat hello.sh
#!/bin/sh -e
ls -l /proc/$$/fd >&2

$ ./hello.sh > /tmp/1
total 0
lrwx------ 1 nga users 64 May 28 22:05 0 -> /dev/pts/0
lrwx------ 1 nga users 64 May 28 22:05 1 -> /dev/pts/0
lr-x------ 1 nga users 64 May 28 22:05 10 -> /home/me/hello.sh
l-wx------ 1 nga users 64 May 28 22:05 11 -> /tmp/1
lrwx------ 1 nga users 64 May 28 22:05 2 -> /dev/pts/0
Run Code Online (Sandbox Code Playgroud)

linux file-descriptor sh

6
推荐指数
1
解决办法
5724
查看次数

即使在用户注销后,也可以在Windows中运行Java进程

我有一个批处理文件,可以在Windows 2003服务器中启动Java进程.根据安全策略,如果用户在一段时间内处于非活动状态,则该计算机的用户将被强制注销.问题是当用户注销时,该过程也会死亡.

我安排了一项新任务("控制面板" - >"计划任务")并选择了"当我的计算机启动时"选项,并在那里提供了用户帐户详细信息.但它似乎没有任何影响,用户仍然退出并且进程终止.是否需要重新启动才能使此更改生效?重启后,我能实现我所期待的(保持流程存活)吗?

或者,将此过程作为Windows服务运行解决问题?如果是这样,您能告诉我如何将Java程序或批处理文件作为Windows服务运行吗?我不想使用任何其他第三方工具或库.

谢谢

java windows windows-services

5
推荐指数
2
解决办法
4888
查看次数

如何更改枚举定义而不影响在C#中使用它的客户端

我定义了以下枚举.我使用下划线,因为这个枚举用于日志记录,我不想通过使用自定义属性产生反射的开销.我们使用非常繁重的日志记录.现在要求将"LoginFailed_InvalidAttempt1"更改为"LoginFailed Attempt1".如果我更改此枚举,我将不得不在应用程序中更改其值.我可以用记录SP中的空格替换下划线.有什么办法可以在不影响整个应用的情况下改变它.请建议.

public enum ActionType
{
    None,
    Created,
    Modified,
    Activated,
    Inactivated,
    Deleted,
    Login,
    Logout,
    ChangePassword,
    ResetPassword,
    InvalidPassword,
    LoginFailed_LockedAccount,
    LoginFailed_InActiveAccount,
    LoginFailed_ExpiredAccount,
    ForgotPassword,
    LoginFailed_LockedAccount_InvalidAttempts,
    LoginFailed_InvalidAttempt1,
    LoginFailed_InvalidAttempt2,
    LoginFailed_InvalidAttempt3,
    ForgotPassword_InvalidAttempt1,
    ForgotPassword_InvalidAttempt2,
    ForgotPassword_InvalidAttempt3,
    SessionTimeOut,
    ForgotPassword_LockedAccount,
    LockedAccount,
    ReLogin,
    ChangePassword_Due_To_Expiration,
    ChangePassword_AutoExpired

}
Run Code Online (Sandbox Code Playgroud)

c# c#-3.0

5
推荐指数
1
解决办法
379
查看次数

ZooKeeper:会话期满后如何正确重新连接?

ZooKeeper FAQ告诉您,当状态变为SESSION_EXPIRED时,必须重新创建ZooKeeper对象。

是否有代码示例可以正确进行这种重新连接?zookeeper发行版中的Recipes文件夹包含两个代码示例,两个示例均假定会话永不过期。这是幼稚的,因为在服务器与ZooKeeper群集断开连接5分钟之后,重新建立连接后,队列和锁定都将不再起作用。

java distributed apache-zookeeper

5
推荐指数
1
解决办法
5181
查看次数

JDBC:在设置条件下:我可以将一组作为单个参数传递吗?

在 JDBC 中,我可以使用问号作为查询参数,如下所示:

"SELECT * FROM users WHERE login = ?"
Run Code Online (Sandbox Code Playgroud)

进而

ps.setString(1, "vasya");
Run Code Online (Sandbox Code Playgroud)

但是我如何查询登录列表:

"SELECT * FROM users WHERE login IN ?"
Run Code Online (Sandbox Code Playgroud)

假设,我有

List<String> logins = ...
Run Code Online (Sandbox Code Playgroud)

我应该在那里输入什么:

ps.setWhat(1, what);
Run Code Online (Sandbox Code Playgroud)

我可以将查询重写为:

"SELECT * FROM users WHERE login = ? OR login = ? OR login = ?"
Run Code Online (Sandbox Code Playgroud)

然后在循环中调用 setString,但我想知道是否可以在查询中将一组元素作为单个参数传递。

也许有特定于供应商的扩展?

java sql jdbc

4
推荐指数
1
解决办法
3903
查看次数